一:下载源码
下载qt-everywhere-opensource-src-5.9.6.tar.xz源码包并解压
tar -xvf qt-everywhere-opensource-src-5.9.6.tar.xz -C ./
cd qt-everywhere-opensource-src-5.9.6
二:修改配置及编译安装
1:修改qmake.conf
vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
将所有的arm-linux-gnueabi**改为aarch64-linux-gnu**(aarch64-linux-gnu自己的工具链),并去掉-lts(这个是支持触摸屏的,这里不需要)
更改前:
更改后:
2:配置config
./configure -prefix /usr/local/qt5.9 \
-opensource \
-debug \
-confirm-license \
-xplatform linux-arm-gnueabi-g++ \
-no-opengl \
-no-pch \
-shared \
-no-iconv \
-no-xcb \
3:make -j24 & make install
三:移植到开发板
1:将/usr/local/qt5.9整个文件夹拷贝到开发板/nfs/xxx/
2:在开发板设置QT环境变量
export QTDIR=/nfs/xxx/qt5.9
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_DEBUG_PLUGINS=0
export QWS_SIZE=1920X1080
export QT_QPA_FONTDIR=$QTDIR/fonts
3:在windows主机C:/Windows/Fonts/里拷贝一个包含汉字的字体到开发板$QTDIR/fonts目录
四:写一个简单程序验证
1:新建文件夹test,在里面新建一个main.cpp文件,内容如下:
#include <QApplication>
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
window.resize(800, 800);
window.setWindowTitle("Hello, world!");
window.show();
return app.exec();
}
2:进入到test文件夹,在终端输入/usr/local/qt5.9/bin/qmake -project 即可生成一个test.pro文件
3:在终端输入usr/local/qt5.9/bin/qmake 即可生成Makefile文件
4:修改Makefile,增加QtWidgets 路径及库链接
INCPATH =-I/usr/local/qt5.9/include/QtWidgets ......
LIBS = -lQt5Widgets ........
5: make 即可生成可执行程序,拷贝到开发板运行即可
五:注意问题
1:程序运行提示缺少动态库,有可能环境变量设置错误,找不到对应的库,有可能有依赖库没有考到开发板,比如工具链里的库,开发板里没有,提示缺少什么库就拷什么库到开发板
2:程序运行正常,但无显示,QT默认编码格式是ARGB32,所以需要将对应的fb0也改成这个格式
3:改了fb0格式,依旧无显示,需要fb0需要show,且不能close,否则无显示,总而言之,如果无显示,可以将fb0的数据读出来,看QT是否有写入,如果有写入,就去看格式是否对上,格式对不上有可能花屏或者无显示(刚好设置成了透明),如果格式都对,就要考虑fb0是否是需要show才可以
4:这个版本QT已经支持了键鼠,只要内核支持标准的USB输入子系统,则插上键鼠就能用,但不支持热拔插,需要先插上键鼠,再启动QT程序
5:删除QT自带的鼠标,增加编译选项QT_NO_CURSOR,具体方法是./configure 上增加-no-feature-cursor,加上这个选项后make和make install 会报错,不用理会不影响,增加此选项后插入鼠标则不会显示鼠标图标了
6:按照第5步重新编译后,拔出鼠标时还是会一直报错:evdevmouse: Could not read from input device (No such device),影响程序运行。解决办法:内核选项关闭#CONFIG_INPUT_EVDEV=y 即可
六:裁剪及编译QT base
以上步骤编译出来的QT库libQt5Gui libQt5Core libQt5Widgets 加起来几百M了,整个qt5.9好几十个G了,肯定没办法满足开发板flash,基本开发板上的应用基本上只需要QT基础功能,所以重新编译QT base,编译出来的库加起来10M左右。
1:cd qt-everywhere-opensource-src-5.9.6/qtbase/
2:./configure -prefix /home/hfzuo/work/qt_install -xplatform linux-aarch64-gnu-g++ -no-opengl -opensource -confirm-license -release -shared
3:make -j24 & make install
4:将libQt5Core.so.5 libQt5Widgets.so.5 libQt5Gui.so.5 考到开发板usr/local/lib plugins/platforms/libqlinuxfb.so 带目录拷贝到开发板usr/local
5:配置环境变量
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=usr/local
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_DEBUG_PLUGINS=0
export QWS_SIZE=1920X1080
export QT_QPA_FONTDIR=/usr/local/fonts(从windos拷贝的字库)