Qt Onboard开发套件实战(2): Qt Creator交叉编译与一键部署实战
发布时间:2026/10/22 2:18:12 锦皓数字建站
: Qt Creator交叉编译与一键部署实战`)
前言上一篇环境搭好了接下来就是真正的开发环节。很多嵌入式开发者都有过这样的痛苦经历交叉编译工具链配置半天环境变量各种出错每次改完代码要手动scp到开发板再ssh上去运行调试只能靠printf打日志效率极低Qt Onboard的一大优势就是与Qt Creator IDE的深度集成——交叉编译工具链预配置好一键部署远程调试开箱即用。本文就带你实战走一遍完整的开发-编译-部署-调试流程用Qt Quick写一个Hello World应用并跑在高通跃龙IQ-9075 EVK平台上。1、交叉编译与部署架构先看架构图理解整个编译部署流程架构图说明左侧开发主机Qt Creator IDE → 源代码 → 交叉编译工具链 → 生成ARM64可执行文件中间网络传输SSH/SFTP部署 GDB远程调试右侧目标设备Qt Runtime 6.11 → 已部署应用 → GDB Server SSH Server → HDMI显示输出核心要点交叉编译在PC端完成生成aarch64架构的可执行文件部署通过SSH/SFTP将文件传输到开发板调试通过GDB Client/Server架构实现远程源码级调试。2、完整开发流程图下面这张Mermaid图展示了从创建项目到在设备上运行调试的完整流程Desktop 套件QtOnboard IQ-9075是否打开 Qt Creator新建 Qt Quick 项目选择项目模板Qt Quick Application配置项目名称与路径选择构建套件 Kit选择哪个 Kit?桌面端编译运行快速验证UI交叉编译生成ARM64程序界面验证通过编译成功一键部署到设备SFTP 传输可执行文件传输 Qt 依赖库部署完成 ✓运行应用HDMI 显示界面交互测试需要调试?启动 GDB ServerGDB Client 连接设置断点 / 单步执行查看变量 / 调用栈修复代码功能验证完成 ✓3、实战步骤详解3.1 创建第一个Qt Quick项目步骤1新建项目打开Qt Creator按照以下路径操作文件 → 新建文件或项目 → 应用程序 → Qt Quick Application (Empty)填写项目信息字段值说明名称HelloOnboard项目名称创建路径~/projects/自行选择构建系统CMakeQt 6推荐使用CMakeQt版本Qt 6.11.x对应QBSP中的Qt版本步骤2选择构建套件在Kit Selection步骤你会看到至少两个Kit✅Desktop Qt 6.11.x— 桌面端编译用于快速开发验证✅Qt 6.11.x QtOnboard IQ-9075— 交叉编译部署到开发板建议两个都勾选桌面Kit用于快速迭代UIIQ-9075 Kit用于真机部署。步骤3理解项目结构创建完成后项目结构大致如下HelloOnboard/ ├── CMakeLists.txt # CMake构建脚本 ├── main.cpp # 应用入口 ├── qml.qrc # QML资源文件 ├── Main.qml # 主界面QML文件 ├── imports/ # QML导入模块 └── build-*/ # 构建输出目录打开Main.qml你会看到默认的Hello World模板import QtQuick import QtQuick.Window Window { width: 640 height: 480 visible: true title: qsTr(Hello World) Text { text: qsTr(Hello World) anchors.centerIn: parent } }3.2 桌面端快速验证在进行交叉编译之前建议先用桌面Kit快速验证界面效果。步骤1切换到Desktop Kit点击Qt Creator左下角的构建套件选择器选择Desktop Qt 6.11.x。步骤2运行点击左下角的绿色运行按钮▶️或者按CtrlR。如果一切正常你会看到一个弹出窗口显示Hello World文字。技巧桌面端调试效率高建议先在桌面把UI和逻辑调好再部署到开发板验证。3.3 交叉编译与部署现在进入重头戏——交叉编译并部署到IQ-9075开发板。步骤1切换到QtOnboard Kit点击左下角的构建套件选择器切换到Qt 6.11.x QtOnboard IQ-9075。步骤2验证设备连接在开始部署之前确认设备连接正常工具 → 选项 → 设备 → 设备选中你的IQ-9075设备点击测试按钮。如果显示测试成功说明连接正常。⚠️ 如果设备连接失败请回顾第一篇中的设备配置步骤检查IP地址、用户名密码、网络连通性。步骤3编译项目点击左下角的锤子图标进行编译或者按CtrlB。编译过程中你可以在编译输出面板看到交叉编译的过程Running steps for project HelloOnboard... Configuration unchanged, skipping CMake step. Starting build... [1/5] Building CXX object CMakeFiles/HelloOnboard.dir/main.cpp.o [2/5] Building QRCC file .qrc/qml_qrc.cpp [3/5] Building CXX object CMakeFiles/HelloOnboard.dir/.qrc/qml_qrc.cpp.o [4/5] Linking CXX executable HelloOnboard [5/5] Generating appname Build completed successfully.观察注意编译输出中的工具链前缀——aarch64-oe-linux-这就是Yocto SDK提供的交叉编译器。步骤4一键部署点击运行按钮▶️Qt Creator会自动完成编译检查如果代码有改动先重新编译文件传输通过SFTP将可执行文件和依赖的Qt库传输到开发板启动应用通过SSH在开发板上启动应用输出重定向将应用的stdout/stderr输出显示在Qt Creator的应用输出面板部署过程的输出类似这样Deploying to IQ-9075 EVK... Uploading file /path/to/HelloOnboard to /opt/QtOnboard/apps/HelloOnboard/HelloOnboard Uploading Qt libraries... Uploading Qt Quick modules... Deployment finished. Starting remote process...这时你应该能在连接IQ-9075的HDMI显示器上看到你的Qt Quick应用了3.4 实战进阶打造一个更丰富的界面光有Hello World不够意思我们来做一个稍微复杂点的界面——一个显示设备信息的仪表盘。修改Main.qmlimport QtQuick import QtQuick.Window import QtQuick.Controls import QtQuick.Layouts Window { width: 800 height: 480 visible: true title: Qt Onboard 设备仪表盘 color: #0F172A ColumnLayout { anchors.fill: parent anchors.margins: 20 spacing: 15 // 标题 Text { text: Qt Onboard 设备状态 font.pixelSize: 28 font.bold: true color: #F8FAFC Layout.alignment: Qt.AlignHCenter } Text { text: Qualcomm IQ-9075 EVK font.pixelSize: 14 color: #94A3B8 Layout.alignment: Qt.AlignHCenter } // 状态卡片行 RowLayout { Layout.alignment: Qt.AlignHCenter spacing: 20 // CPU状态 Rectangle { width: 180 height: 120 radius: 12 color: #1E293B border.color: #334155 border.width: 1 ColumnLayout { anchors.centerIn: parent spacing: 5 Text { text: ⚡ CPU font.pixelSize: 16 color: #F8FAFC Layout.alignment: Qt.AlignHCenter } Text { text: 8 Cores font.pixelSize: 24 font.bold: true color: #00A896 Layout.alignment: Qt.AlignHCenter } Text { text: Cortex-A76 font.pixelSize: 11 color: #64748B Layout.alignment: Qt.AlignHCenter } } } // NPU状态 Rectangle { width: 180 height: 120 radius: 12 color: #1E293B border.color: #334155 border.width: 1 ColumnLayout { anchors.centerIn: parent spacing: 5 Text { text: NPU font.pixelSize: 16 color: #F8FAFC Layout.alignment: Qt.AlignHCenter } Text { text: Hexagon HTP font.pixelSize: 18 font.bold: true color: #F59E0B Layout.alignment: Qt.AlignHCenter } Text { text: AI Accelerator font.pixelSize: 11 color: #64748B Layout.alignment: Qt.AlignHCenter } } } // 系统状态 Rectangle { width: 180 height: 120 radius: 12 color: #1E293B border.color: #334155 border.width: 1 ColumnLayout { anchors.centerIn: parent spacing: 5 Text { text: 系统 font.pixelSize: 16 color: #F8FAFC Layout.alignment: Qt.AlignHCenter } Text { text: Qt 6.11 font.pixelSize: 22 font.bold: true color: #38BDF8 Layout.alignment: Qt.AlignHCenter } Text { text: Yocto Linux font.pixelSize: 11 color: #64748B Layout.alignment: Qt.AlignHCenter } } } } // 底部操作按钮 RowLayout { Layout.alignment: Qt.AlignHCenter spacing: 15 Button { text: 刷新状态 font.pixelSize: 14 Layout.preferredWidth: 120 Layout.preferredHeight: 40 onClicked: { console.log(Refreshing device status...) } } Button { text: 关于设备 font.pixelSize: 14 Layout.preferredWidth: 120 Layout.preferredHeight: 40 onClicked: { console.log(Qt Onboard for IQ-9075 EVK) } } } // 底部提示 Text { text: Qt Onboard Development Kit — Powered by Qt Qualcomm font.pixelSize: 11 color: #475569 Layout.alignment: Qt.AlignHCenter Layout.bottomMargin: 10 } } }修改完后重新编译并部署你会在IQ-9075上看到一个科技感十足的仪表盘界面3.5 远程调试技巧程序出Bug了不用慌Qt Creator支持完整的远程源码级调试。步骤1启动调试点击左下角的调试按钮或者按F5。Qt Creator会自动以Debug模式重新编译包含调试信息部署带调试符号的可执行文件到设备在设备上启动gdbserver本地GDB Client连接到设备端的gdbserver应用启动并停在main函数入口步骤2设置断点在代码行号左侧点击设置断点会出现红色圆点。程序运行到断点处会暂停。步骤3常用调试操作操作快捷键说明继续运行F5继续执行到下一个断点单步跳过F10执行下一行不进入函数单步进入F11进入函数内部单步跳出ShiftF11跳出当前函数停止调试ShiftF5终止调试步骤4查看变量和调用栈调试时可以在右侧面板查看局部变量和表达式查看当前作用域的变量值监视表达式添加自定义变量或表达式进行监视调用栈查看函数调用层级断点管理所有断点QML调试Qt Creator还支持QML调试可以在QML代码中设置断点查看QML属性值。确保在项目设置中启用了QML调试。3.6 命令行交叉编译高级如果你更喜欢命令行操作或者需要在CI/CD中进行自动化构建可以直接使用SDK中的交叉编译工具链。加载SDK环境# 加载Yocto SDK环境变量source~/Qt/6.11.x/QtOnboard/IQ-9075/sdk/environment-setup-cortexa76-oe-linux# 验证交叉编译器echo$CC# 输出类似: aarch64-oe-linux-gcc ...whichqmake# 输出Qt的qmake路径使用CMake交叉编译# 创建构建目录mkdirbuild-arm64cdbuild-arm64# 使用SDK中的CMake工具链文件配置cmake..\-DCMAKE_TOOLCHAIN_FILE$OECORE_NATIVE_SYSROOT/usr/share/cmake/OEToolchainConfig.cmake\-DQt6_DIR/path/to/qt6/lib/cmake/Qt6\-DCMAKE_BUILD_TYPERelease# 编译make-j$(nproc)手动部署# 通过SCP传输可执行文件scpHelloOnboard root192.168.1.100:/opt/QtOnboard/apps/# SSH运行sshroot192.168.1.100cd/opt/QtOnboard/apps ./HelloOnboard4、常见问题与排错Q1交叉编译报错 “undefined reference to …”可能原因链接时找不到对应的库解决方法确认使用了正确的QtOnboard Kit在CMakeLists.txt中添加需要的模块find_package(Qt6 REQUIRED COMPONENTS Quick Qml) target_link_libraries(app PRIVATE Qt6::Quick Qt6::Qml)清理构建目录重新编译Q2部署失败提示连接超时排查步骤确认开发板和电脑在同一局域网ping开发板IP确认网络通手动测试SSH连接ssh root设备IP检查设备上SSH服务是否运行Q3应用在设备上启动失败提示could not find the Qt platform plugin可能原因Qt平台插件没有正确部署解决方法在项目设置的部署步骤中确认勾选了Deploy Qt Libraries检查设备上Qt库是否完整ls /usr/lib/qt6/plugins/手动设置QML导入路径exportQML2_IMPORT_PATH/usr/lib/qt6/qmlexportQT_QPA_PLATFORMeglfsQ4远程调试无法命中断点可能原因使用了Release模式编译没有调试符号二进制文件和源码不匹配解决方法切换到Debug构建模式清理后重新编译部署确认源码文件路径和编译时一致5、性能优化小贴士1. 编译速度优化# 使用ccache加速重复编译# 在CMake配置中添加-DCMAKE_CXX_COMPILER_LAUNCHERccache2. 部署速度优化增量部署Qt Creator默认只传输改动的文件使用部署脚本对于复杂项目可以自定义部署步骤网络优化使用有线网络比WiFi快很多3. 应用启动优化使用Quick Compiler预编译QML减少启动时的资源加载考虑使用Splash Screen提升体验6、总结本篇我们深入实战了Qt Onboard的交叉编译与部署流程核心要点回顾能力传统方式Qt Onboard方式工具链配置手动配置Yocto SDK环境变量Kit预配置一键切换交叉编译命令行操作容易出错Qt Creator可视化错误提示友好部署手动scp ssh运行一键部署自动处理依赖调试printf打日志或远程gdb配置复杂开箱即用的远程源码级调试开发效率低反复手动操作高IDE一站式完成本篇核心收获✅ 掌握Qt Quick项目的创建与配置✅ 理解交叉编译原理与QtOnboard Kit的使用✅ 学会一键部署应用到IQ-9075开发板✅ 掌握远程GDB调试技巧✅ 了解命令行交叉编译方法在下一篇中我们将进入多媒体与摄像头的实战讲解如何在Qt Onboard中使用GStreamer播放视频、通过ALSA处理音频、以及接入USB摄像头——这些都是FactoryPulse方案中的关键定制功能。系列索引一环境搭建全攻略 · 二Qt Creator交叉编译与一键部署实战 · 三多媒体与摄像头集成· 四边缘AI应用如果本文对你有帮助欢迎点赞、收藏、关注有问题也欢迎在评论区交流~
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。