第4章 Qt开发环境搭建:从零开始构建嵌入式Qt王国

说实话,Qt开发环境搭建这件事,我见过太多人在这里栽跟头了。有的折腾两天装不上交叉编译器,有的编译Qt库时卡在某个错误提示前不知所措。我自己刚入行那会儿,也曾在Ubuntu和Windows之间反复横跳,最后发现——嗯,其实只要理清几个关键步骤,这事儿真没那么玄乎。

4.1 Qt Creator安装与配置

先说说IDE的选择。我个人习惯用Qt Creator,轻量、顺手,调试功能也够用。你可能会问:为什么不用VS Code?VS Code当然也行,但Qt Creator对qmake和CMake项目的支持更原生,尤其是信号槽的自动补全,用起来很舒服。

安装步骤其实很简单:

  1. 去Qt官网下载开源版本(记得选离线安装包,在线安装慢得让人抓狂)
  2. 安装时勾选你需要的组件——我建议至少选上Qt 5.15.2或6.5.x LTS版本
  3. 别忘了勾选「Sources」组件,后面编译Qt库时会用到
我的小技巧: 安装路径不要带中文和空格。我曾经因为路径里有「Qt 5.15」这个空格,折腾了半小时才发现是路径解析的问题。

配置方面,打开Qt Creator后,进入「工具」→「选项」→「Kits」。这里要添加你的交叉编译工具链。别急着点「添加」,先确认你的交叉编译器已经装好了。

4.2 交叉编译工具链集成

交叉编译,说白了就是「在PC上编译,在ARM板上运行」。你想想看,嵌入式设备的CPU通常跑不动编译器,所以我们得在性能强劲的PC上生成目标代码。

我常用的交叉编译器是arm-linux-gnueabihf-gcc。安装方式有两种:

  • 方法一: 直接用apt安装(适合Ubuntu)
    sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
  • 方法二: 从芯片厂商(如NXP、TI)下载预编译的工具链包

安装完成后,验证一下:

arm-linux-gnueabihf-gcc --version
# 输出类似:arm-linux-gnueabihf-gcc (Linaro GCC 7.5-2019.12) 7.5.0

然后在Qt Creator的「Kits」页面,点击「添加」,选择「Device Type」为「Generic Linux Device」,编译器选你刚装好的交叉编译器。这里有个坑——Qt Creator默认的qmake是PC版的,你得手动指定嵌入式版的qmake路径。

注意: 交叉编译器的版本要和你的Qt库版本匹配。我遇到过用GCC 9编译Qt 5.12,结果链接时一堆undefined reference错误。后来换成GCC 7才搞定。

4.3 Qt库的编译与部署

这一步是很多人觉得最头疼的。其实核心就三个字:configure、make、make install。

先下载Qt源码包,解压后进入目录:

./configure -prefix /opt/qt5.15-arm \
  -xplatform linux-arm-gnueabihf-g++ \
  -opensource -confirm-license \
  -nomake examples -nomake tests \
  -skip qtwebengine  # 这个模块编译特别慢,嵌入式一般用不到

配置参数说明:

参数 作用
-prefix 指定安装路径,我习惯放在/opt下
-xplatform 指定交叉编译平台,这个要和你的工具链对应
-skip 跳过不需要的模块,节省编译时间

然后就是漫长的等待:

make -j4   # 4核并行编译,根据你的CPU核心数调整
make install

编译时间取决于你的机器性能。我当年用一台i5笔记本编译Qt 5.12,整整跑了两个多小时。所以建议你泡杯咖啡,或者干脆下班前跑上,第二天早上来看结果。

部署到开发板: 编译完成后,把/opt/qt5.15-arm整个目录拷贝到开发板的/usr/local/下。别忘了设置环境变量:
export QT_QPA_PLATFORM=linuxfb
export LD_LIBRARY_PATH=/usr/local/qt5.15-arm/lib:$LD_LIBRARY_PATH

4.4 第一个Qt嵌入式程序:Hello World

环境搭好了,总得跑个程序验证一下。我习惯用最经典的Hello World来测试——不是因为它简单,而是因为如果连这个都跑不起来,后面复杂的项目就更别想了。

新建一个Qt Widgets Application,main.cpp里写:

#include <QApplication>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    QLabel label("Hello, Embedded World!");
    label.setAlignment(Qt::AlignCenter);
    label.resize(320, 240);
    label.show();
    
    return app.exec();
}

在Qt Creator里选择你刚才配置的交叉编译Kit,然后点击「构建」。如果一切顺利,会在build目录下生成一个可执行文件。

把它传到开发板上:

scp HelloWorld root@192.168.1.100:/root/
ssh root@192.168.1.100
./HelloWorld

如果屏幕上出现了一个居中的「Hello, Embedded World!」,恭喜你,环境搭建成功了!

避坑指南: 如果程序运行时报错「libQt5Widgets.so.5: cannot open shared object file」,说明动态库路径没设置对。检查一下LD_LIBRARY_PATH是否指向了正确的lib目录。

嗯,到这里,Qt开发环境就搭建完毕了。你可能觉得步骤有点多,但相信我——一旦你完整走通一次,后面再搭建其他项目时就会轻车熟路。下一章我们会开始真正设计UI界面,到时候这些基础就派上用场了。