赞
踩
本次移植采用buildroot构建Qt根文件系统的方式,在busybox构建的根文件系统之上,自动添加Qt库及其需要的依赖,极大简化了开发流程。
buildroot相较于busybox构建根文件系统的最大好处就是可以自动添加各种外部库,例如qt,tslib等,而不是自己手动去官网下载编译。这样的好处是问题少,效率高。
官网地址:https://buildroot.org,得到buildroot的压缩包并解压。
接下来通过图形化界面生成.config配置文件
make menuconfig
进入buildroot配置菜单
buildroot也可以选择设置登陆密码
根据自己需要安装对应的qt库
配置好之后,会生成用于make的.config文件,编译即可(整个过程和编译内核类似)
sudo make
编译完成后,会在该目录output/images/下生成压缩文件rootfs.tar。解压后,可以看到我们的根文件系统:
在/usr/lib下,可以看到buildroot已经编译好的Qt库:
将文件系统解压后,拷贝到指定目录(这里使用nfs方式,需要修改nfsroot的位置)
uboot里修改nfsroot的位置:
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=xxx(ip): /home/xxx/linux/nfs/buildrootfs rw ip=xxx::eth0:off'
再次上电,输入用户名及密码,文件系统工作正常。
在测试Qt之前,首先要声明所需要的环境变量。
Qt平台插件:
export QT_QPA_PLATFORM=linuxfb
有了Qt插件之后,就可以看到我们的Qt程序可以正常运行了。跑一个Qt自带的例程:
cd /usr/lib/qt/examples/widgets/animation/moveblocks
./moveblocks
效果如图所示:
使用命令行编译Qt程序很简单,但有一点需要特别注意:编译的Qt项目必须与编译buildroot根文件系统使用同一编译器,否则会有问题。
在buidroot的output/host/usr/bin目录,查看qt版本,就可以看到相关信息。
之后进入我们的工程目录(.pro文件所在目录),qmake生成对应Makefile
查看刚刚生成的Makefile,可以看到使用的交叉编译器和buildroot的相同
有了Makefile文件,就可以执行make命令,生成可执行文件
buildroot在编译过程中要保证联网,因为它会从服务器上下载所需的东西。因为很多服务器部署在国外,所以有时构建过程会特别漫长,如果下载速度过慢,可以选择离线下载对应压缩包的方法。
如果遇到上图的情况,可以先暂停make,首先进入压缩包的网址,下载好后将压缩包放到buildroot/dl/目录下的对应文件里(不用解压),之后再重新make,buildroot会在dl目录下找到对应的压缩包并解压(解压后的源码会放到buildroot/output/build下),之后重复操作即可。
出现这类错误的原因是Qt找不到插件,声明环境变量即可。
当然,如果还需要使用触摸等功能,也是声明环境变量。
命令行显示“#”,与环境变量PS1有关。PS1用于命令提示符显示,参数如下:
在/etc/profile可以看到,命令提示符PS1在此处被定义。注释的代码是最开始的代码,可以看到PS1背定义为了“#”。此处把它注释掉,改为上面的定义即可。
这样我们就可以定制自己的命令提示符:
要让Qt正确显示字体,就要保证有对应的字体文件
方法一:声明环境变量
export QT_QPA_FONTDIR=/usr/share/fonts
一般会把字体文件放到/usr/share/fonts下,Qt程序在使用字体时会去该目录下查找
方法二:QFontDatabase
如果想要使用第三方的字体库,可以使用QFontDatabase,指定字体库文件
int id = QFontDatabase::addApplicationFont("./simsun.ttf"); //将指定字体加入字体族
QFont font;
font.setFamily("simsun"); //填入文件名
ui->pushButton->setFont(font);
...
触摸功能:
export TSLIB_TSDEVICE=/dev/input/event1 // eventX X可能取 可能取 值 0 1 …
其中eventX文件为触摸屏驱动的设备文件
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。