注:本方法只在zynq平台,qt:5.3.2 编译器:gcc-linaro-arm-linux-gnueabihf-4.8下试验成功,其他平台未做测试,不同的qt和工具链版本之间会有一定的差异。
零,前提是触摸屏的硬件及驱动是支持多点触摸的(evtest程序测试),否则就不用看了
一,设置交叉编译工具链
~/.bashrc中添加工具链:
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=/home/brook/work/cross_compiler/gcc-linaro-arm-linux-gnueabihf-4.8/bin:$PATH
使工具链生效 $ source ~/.bashrc ,或者重启电脑
二,移植mtdev,用于多点触摸的库
1,下载源码:
git clone http://bitmath.org/git/mtdev.git
2,配置编译
./autogen.sh (失败的话;sudo apt-get install autoconf automake libtool)
./configure --prefix=/home/brook/work/ZYNQ/mtdev/mtdev/out_temp/ --host=arm-linux CC=arm-linux-gnueabihf-gcc
make install
将编译出的so库,拷贝到开发板的/lib, /usr/lib等能访问到的库路径下即可
三、编译qmake
1,在PC上安装多点触摸库,其实就是为了后面编译qmake,它去链接多点触摸库时,用PC上的骗过它,而不是用交叉编译的。还一种编译方式就是修改QT源码将所有判断mtdev的地方(搜索QT_NO_MTDEV)修改掉,就不用配置PKG_CONFIG_SYSROOT_DIR了。
sudo apt install libmtdev-dev (安装的版本和交叉编译的版本差异不要太大)
2,配置和编译
修改qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf工具链后面添加hf(因为这里的工具链是带硬编码的)
export PKG_CONFIG_SYSROOT_DIR=/
export PKG_CONFIG_LIBDIR=/home/brook/work/ZYNQ/mtdev/mtdev/out_temp/lib/pkgconfig/
export PKG_CONFIG_LIB=/home/brook/work/ZYNQ/mtdev/mtdev/out_temp/lib/pkgconfig/
./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix /opt/Qt-5.3.2/ -no-c++11 -no-opengl -mtdev -I /home/brook/work/ZYNQ/mtdev/mtdev/out_temp/include -L /home/brook/work/ZYNQ/mtdev/mtdev/out_temp/lib -lmtdev
make
make install
3,将相关qt库安装到系统中,其他的库就不说了,关键将Qt-5.3.2/plugins/generic/libqevdevtouchplugin.so拷贝到对应的plugins/generic/目录下
4,启动QT程序时环境配置
export LD_LIBRARY_PATH=/usr/qt/lib:$LD_LIBRARY_PATH #配置qt库路径
export QT_QPA_FONTDIR=/app/fonts #配置字体路径
export DISPLAY=:0
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/qt/plugins #插件路径
export QT_IM_MODULE=mockup
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/qt/plugins #下面是支持多点触摸的
export QT_QPA_GENERIC_PLUGINS=EvdevTouch
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event1
四,测试
编译qmake生成的测试程序是多点触摸测试的:
Qt-5.3.2/examples/touch/pinchzoom/pinchzoom //放大缩小
Qt-5.3.2/examples/touch/fingerpaint/fingerpaint //多个手指同时划线