以一个linux-arm-test配置目录为例,将mkspecs目录下的linux-arm-gnueabi-g++复制为linux-arm-test
cp linux-arm-gnueabi-g++ linux-arm-test –r
修改linux-arm-test配置
cd linux-arm-test
查看ls /opt/FriendlyARM/toolschain/4.4.3/bin查看目录下实际编译工具链名
将linux-arm-test目录下qmake.config中的arm-linux-gnueabi-开头都更改为实际路径加工具链名:PATH+arm-none-linux-gnueabi-
如QMAKE_CC = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc
再加入三行:
QT_QPA_DEFAULT_PLATFORM = linuxfb #qpa图形插件,
QMAKE_CFLAGS_RELEASE += -O2 -march=armv5te
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv5te
说明1:QT_QPA_DEFAULT_PLATFORM选项是指定图形插件, Qt5将各平台底层抽象为一个 qpa 插件,通常在mac上是cocoa, 在window上是windows, 在linux X11下是xcb, 如果有OPENGL支持, 那么选eglfs。而对于无硬件加速的设备,则选择linuxfb,。 minimal仅仅是让程序跑通, 不起任何作用
说明2:目标板为新唐N32905U1DN,cpu为arm936ejs,执行arm-linux-gcc –target-help 查看交叉编译器所支持的架构,选择了其中比较接近的一个为armv5te
修改qmake.conf文件:
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental gdb_dwarf_index
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv5te
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv5te
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc
QMAKE_CXX = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++
QMAKE_LINK = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++
# modifications to linux.conf
QMAKE_AR = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-objcopy
QMAKE_NM = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-nm -P
QMAKE_STRIP = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-strip
load(qt_config)
可以尝试如下方法 ,但本人没试过 :
编译嵌入式QT5.7.0,配置完成后在make时遇到 ERROR: Unknown module(s) in QT: quick,后将配置文件加入-skip qtdeclarative解决,完整配置选项如下:
./configure -opensource -shared -xplatform linux-arm-gnueabihf-g++ -qt-zlib -no-opengl -no-openssl -nomake examples -skip qtcanvas3d -skip qt3d -qreal float -skip qtdeclarative -prefix /xilinx/qt5/qt5instll/
期间会报错 (大概三次),方法是直接改源码,注释掉错误地方
4. 安装后的问题
Qt5 背景透明显示问题
qt4 可以通过 QWSServer::setBackground(QColor(0, 0, 0, 0)) 设置背景透明,
但是qt5里面没有这个了,现在程序运行到qt5去掉这段代码后,在arm 上面跑背景是为黑色的,
qt5 应该怎么设置才能让背景透明。
已经解决,在arm上跑用的是linuxfb平台,需要更改两个地方。
1. 在qtbase\src\platformsupport\fbconvenience\qfbscreen.cpp中将
mCompositePainter->fillRect(rect, Qt::black);
更改为
mCompositePainter->setCompositionMode(QPainter::CompositionMode_Source);
mCompositePainter->fillRect(rect, Qt::transparent);
mCompositePainter->setCompositionMode(QPainter::CompositionMode_SourceOver);
2. 在qtbase\src\plugins\platforms\linuxfb\qlinuxfbscreen.cpp中将
mBlitter->drawImage(rects, *mScreenImage, rects);
更改为
mBlitter->setCompositionMode(QPainter::CompositionMode_Source);
mBlitter->drawImage(rects[i], *mScreenImage, rects[i]);
mBlitter->setCompositionMode(QPainter::CompositionMode_SourceOver);
#配置qt插件以及执行环境
将安装软件目录下的plugins拷贝到目标板。
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins #qt插件加载目录
export QT_QPA_PLATFORM=linuxfb:tty=/dev/tty0 #qt图形插件平台
export QT_QPA_FONTDIR=$QTDIR/lib/fonts #qt字体库目录
参考文章:点击打开链接