Qt是跨平台的应用程序和UI框架,它包括跨平台类库、集成开发工具和跨平台IDE。使用Qt只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。

1. Qt编译

从Qt官网下载最新的Qt5.8源码,可以在源码包中查看README文件等,确定编译、安装的步骤。

从README文件可以知道编译Qt5.8要求主机端编译器以及交叉编译器支持c++11的标准。而只有g++ 4.8以上的版本才完整支持c++11,在编译Qt5.8之前,需保证主机端编译器和交叉编译器已经更新或安装了g++ 4.8以上的版本。

在/qtbase/mkspecs/linux-arm-gnueabi-g++目录下,需要修改qmake.conf文件,加入下面选项,并修改相应的交叉编译工具。

  1. QT_QPA_DEFAULT_PLATFORM = linuxfb
  2. QMAKE_CFLAGS_RELEASE +=-O2-march=armv5te
  3. QMAKE_CXXFLAGS_RELEASE +=-O2 -march=armv5te
  4. #modifications to g++.conf
  5. QMAKE_CC = arm-linux-gcc
  6. QMAKE_CXX = arm-linux-g++
  7. QMAKE_LINK = arm-linux-g++
  8. QMAKE_LINK_SHLIB = arm-linux-g++
  9. #modifications to linux.conf
  10. QMAKE_AR = arm-linux-ar cqs
  11. QMAKE_OBJCOPY = arm-linux-objcopy
  12. QMAKE_NM = arm-linux-nm -P
  13. QMAKE_STRIP = arm-linux-gnueabi-strip

/qtdeclarative/examples/quick/quick.pro,注释掉qtHaveModule(quickwidgets):SUBDIRS += quickwidgets, quickwidgets例程需要opengl的支持,这个例程会编译失败。

  1. # qtHaveModule(quickwidgets): SUBDIRS +=quickwidgets

./configure –h查看配置选项,Qt5.8自身支持触摸屏,可以无需其它的触摸屏库(如tslib)。

  1. ./configure-prefix /usr/Qt5.8 -confirm-license -opensource -release -make libs -xplatformlinux-arm-gnueabi-g++ -optimized-qmake -pch -qt-libjpeg -qt-libpng -qt-zlib-no-opengl -no-sse2 -no-openssl -no-cups -no-glib -no-dbus -no-xcb -no-xrender-no-separate-debug-info -make examples -nomake tools -nomake tests -no-iconv
  1. make j4 #根据机器配置,编译需一个多小时。
  1. make install #安装Qt,在/usr/Qt5.8目录下有相应的examples、lib、plugins等目录。

2. 环境变量

把Qt5.8安装目录下examples、lib、plugins目录拷贝到板端/usr/Qt5.8。使用Qt,系统必须知道Qt的位置,配置等等,在/etc/profile文件中加入Qt的环境变量。

  1. QTDIR=/usr/qt5.8
  2. export QT_QPA_FONTDIR=$QTDIR/lib/fonts
  3. export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
  4. export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
  5. :size=800x480:mmSize=800x480:offset=0x0
  6. export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event1
  7. LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib
  8. export LD_LIBRARY_PATH

3. 测试

板端启动系统,进入/usr/Qt5.8目录,运行Qt测试代码。

  1. /usr/Qt5.8/examples/touch/pinchzoom # ./pinchzoom

22_Qt移植 - 图1

  1. /usr/Qt5.8/examples/svg/embedded/fluidlauncher # ./fluidlauncher

22_Qt移植 - 图2