《QT5的ARM移植及其中文显示.docx》由会员分享,可在线阅读,更多相关《QT5的ARM移植及其中文显示.docx(18页珍藏版)》请在三一办公上搜索。
1、1.1 QT5的移植1.1.1 Qwt6的配置1.1.1.1 Win7平台的qwt插件安装qwt 源码下载:因为官方的qt creator是用 msvc编译的,不能识别 mingw 编译的qwt,所以需要将 qt creator 的源码用mingw编译一次。Qt creator(msvc2013 版)+ vs2013 + qwt 的配置编译qwt库我用的qt5.4-msvc版本直接打开qwt的pro工程,编译全部,生成lib和dll文件* buildS Open GL 5dbit-Debug 卜 I:li如 qvt.dll Ljqfwt.exp 周 qwt Jib |j qwtddll(qwt
2、d-exp |cpvtd.ilk 目 gtd.lib 咨 qvld.pdb配置(1)将 qwtd.dll、qwt.dll 拷贝到 H:QtQt5405.4msvc2013_64_openglbin 下,将 qwtd.lib、qwt.lib 拷贝 H:QtQt5405.4msvc2013_64_opengllib 下(以 qt 安装目录 H:QtQt5405.4msvc2013_64_opengl 为例)。皿(Hi) Qt,Qt5A& , 5.4 mswE2Ql J_64_op=ngl binmgl lib k0 KmlpaHemswaldSior.wM Ji Ql5 WhEsb-BB.dl 叵
3、3icmlpaMEix*wQl5 Widgffted.pdbF? wridtployqt.ffjiffQ5 Widgets d.d IISlLida Q.回 uiuwwQ5 Widgets .dllStudo- EtestcDn.eote-QtSebVinvd.pdbPl sjncqt.plQt5WebVinvd.dllFl 心止代亡,| QlStbVieva.dll成 qMjId.史囚河b.或 q-desjgerjEJuaSnjcllji CS3Web5ockBKd.dll亶 qwl.dllji| Ql5Wvb5ochvt3.dllE QWTbProcwjiPXPQl5WrbKrtWidge
4、tsd pdpQ QtWrbErugineProtM-sKe%, Q15 WebKjtWdgrt5d.dllEQs5WebKiftViclnet5.dll|= ES qtenvj.batjQSWebKrtd.pdh-SSDk Qt Qt5.4.O 1 5.4 1 msuu2013_&4_Dpe共享*t f QtSXmlPfittsimsd.rpirl qtmainJib-Studio 9.Studio 1-t qtmain.prl qtmaindJib,qtmaind.prl 国叩rtadll gjqwt.lib 食职td.dll 四 qwtdlib(2) 将 qwt_designer_plu
5、gin.dll 和 qwt_designer_plugin.lib 拷贝至U H:QtQt5405.4msvc2013_64_openglpluginsdesigner 目录下。SSD- (H:) Qt Qt5.4.Q 5.fl 卜 msvc2013_54_ape-ngl plugins 卜 designer-新尝(犊曲 qaxwidgetdll金 q decl a retiveview.d II|qquickiividget.dll阁 qwebviww.d Ii_openg囹 qwt.desi g n er_plu g in.dllB qwt-desi g n &r plu g in, li
6、b(3) 将qwtsrc目录下的所有.h和.cpp放入一个空文件夹QWT中,再将该文件夹拷贝到H:QtQt5405.4msvc2013_64_openglinclude 目录下。* SSD (H;卜 Qt 卜 Qt54.0 5.4 卜 m,svc?0,13 64 ppeng I indudc: 共享-部B犊I AjctiveQtJ QtQuidc|. QWT |Enginio& QtQuickPaiiicles使用新建项目,然后进行配置:(1) 属性-配置属性-C/C+-常规,附加包含目录:$(QTDIR)includeQWT(2) 属性-配置属性-链接器-输入,附加依赖项:qwtd.lib(
7、3) 属性-配置属性-C/C+-预处理器,预处理器定义:QWT_DLL1.1.1.2 Ubuntu平台的qwt插件安装GCC 的 qmake05:59:53: Starting: T/opt/Qt5.5.0/5.5/gcc/bin/qmake1 7opt/qt5/qwt-6.1.2/qwt .pro -r -spec linux-g+-32 CONFI6+=di建立gcc版本的qmake软链接raatubuntu:/apt/qt5/qwt-6kl.Zff In -s /opt/Qt5.5*6/5.5/gcc/bin/qmake gcc-qnake将gcc-qmake放到/usr/bin下面就可
8、以使用gcc-qmake 了。为了和ARM 版本的qmake区别! 删除链接rootubuntu:/opt/qt5/qwt-6.1.2# rm -fr gcc-qnake rootQubuntu: /opt/qt5/qwt - fi. 1 2# |那么我就可以在ubuntu下面编译qwt 了。因为我用qt-creator打开qwt.pro后,builder 后不知道在哪里生成了哪些东西。进入qwt-6.1.2目录只好用qmake手动编译了。#gcc-qmake#make#make install就会在/usr/local下面生成nakel: Leaving directory */cpt/qt
9、5/qwt-6k1.2/designerinstall -ri 644 -p /opt/qt5/qwt-6 r L*2/qwtconfig so llbqwebvtew.solibqquickwidgct.so libqwt_destgner_plugin sorootubuntu:/opt/-Qt5.5.0/l&oLs/QtCreator/bin/plugtns/destgner# .折腾了半天,就是掉了这个路径 还有另外的一个路径:rootQubuntu:/opt/Qt5.5.6/5.S/gcc/plugins/designer# Is libqdeclarattveview.so fTb
10、qweGvtew.so libqquickMtdget .so ltbqwt_destgner_plugin so ootaubuntiK,npt/QtS.5/gce/pLuginsydeElgn巴厂寺 匚d 下面的暂时不要这么做,因为不晓得在qt-creator如何应用头文件,还是先直接引用/usr/local/qwt-6.1.2/lib + include 吧另外拷贝/usr/local/qwt-6.1.2/lib下面的4个库到相应的目录LlbQtSPostttoiTLmg. so. 5.5 It bQtS Postttoni ng .so.5.5.0 lihQtSP ri nt Supp
11、ort Aa ItbQtSP rtntSupportplLtbqvrtItbqwtso.6Lt bqwt.so.6.1 lAbqwt .so.6.L.211.bQt5PrtntSuppcrtso libQt5PrtntSuppcrtso.5pkgconfigrootubuntu:/opt/Qt5.5.B/5.5/gcc/lib#新建1个Qwt的目录,拷贝头文件到里面qwt_plot_gLcanvas. hqwtransfDrm* hqwtplotgridhqwtwheel + hqwt_plot*hqwt_wtdget_ove rlay.hroatubuniu:/tpt/QtS*5* 0/5*
12、5/gcc/irbclude/Qwt# |Qwt的交叉编译我的qt库交叉版本没有使能opengl选项,所以qmake, make出现错误!找不到opengl模块配置qwt,重要的配置文件qwtconfig.prirootgubuntu;/opt/qtS/qut-G.1,2-arm# IsCHANGES-6B1daclibqwtbuild rpriqwtaprfsrcCOPYINGexanplesMakefileqwtconfig - priqt. protextengidiesdesignerINSTALLplaygrciundqwtfuhct ions Jpr iREADMEQDtubunt
13、u:,口pt/qt:5/qwt:6 1 点-与厂田春 .修改qwtconfig.pri,里面可以设置install的路径,去除需要注释如下的编译选项,编译arm qt时,没有支持opengl。#QWT_CONFIG += QwtOpenGL第二,需要注释如下的编译选项:#QWT_CONFIG += QwtDesigner同时修改安装路径为:避免和gcc版本的混淆QWT_INSTALL_PREFIX = $JT_INSTALL_PRIEFIXUnix (QWT_I NSTALIL_PRE FIX = /usr/local / qwt - $QWT_VERS ION-arm# QN T_ INS
14、T A L L_PR EFIX = / us r /1 oc a I- 3V ERSIQN-qt- E RS 10bWin32 QHT_I NSTAILIL_PREFIX = C:/Qwt- $QWT_V ERS ION|# QW T IMS TA L L EFIX = C/Qwt - S&QWTVEIR SI ON- q t -5SQT_V6R SIONroatubjntii;/usr/lacal# Isbin etc gaRES include lib Ran qwt-61.2sblnroo t lii b jn t li i / u s r /1 a cals cd qwt-6.1-2-
15、am/!rootiglubLintu:/usr/Local/qNt-0.Isdc f eatur&s IncTutle lib当然需要安装到开发板上面,才能运行。1.1.1.3 Qwt 的使用INCLUDEPATH += /usr/local/qwt-6.1.2/includeLIBS += -L/usr/local/qwt-6.1.2/lib/-lqwt 看下面:QF4- 1_CONFIG_IWKER Im /uer/Ltlbi/s/gtk-2-0/*/tnnodiilesfIn-tb*ie.aa /usr/lib/gtk-?.S/imFioidiiles/imibus,so ; d。If
16、-e $IM_JNFIG_HARKER s then IH_CQN F I_N/iAKER2-i break ft datieIN_COHFIG_ftARKEH3=a for IM_CONFIG_rWKER in/gtk-3,0/*/wnwhilcs/ifi-ibw,so /usr/lib/gtk- 3, e/lmnodules/tm-t bus-so ; do ir | -e Slrt_CONFlG_MRKEft |f themIH_C0NFk_HifiRKER3-i bnsak Ft done tf 5.IM_C0NFIG_riARKERZ = 1 5IM_CONF IKARKERS =
17、1 1 then.CTK lH_MClDUiLE-itiH ftQT_lM_HODULE-XtP# (RncKiule sihenavailable for qt# (iiitzh_CN (providing /etc/xil/xlnlt/xtri put.d/zh_CN)Seleetton PathPriority Status0/etc/Xll/jttntt/xlnput.d/tbiUlS6&a-uta node* 1/etc/Xll/KlniLt/xinpiJt.d/tb-usqmake-rebuilt all总结:导致ui_*.h文件没有更新的原因是源代码中#include ui_*.
18、h的位置和实际生成的 位置不同,引用的是老的ui_*.h,设置UI_DIR后就规定了位置于是不会出错了。确实如此:操作一次后,以后就立即生效了。rootubuntu:-/build-test_ny-Desktop_Qt_5_5_0_GCC_32bit-Debug# Is main * o Makefile moc_widget * cpp moc_wid get.o test_my UI widget *o rootgubuntu:build-testjny-Desktop_Qt_5_5_0_GCC_32bit-Debug# cd HI/ rootgubuntui-/build-test_ny
19、-Desktop_Qt_5_5_0_GCC_32bit-Debug/UI# Is uiwidget,hD9tubuntu:test_nv-D巴ktDp_Qt_5_S_8_GCC_32bit-Debug/Ul。新建工程的时候,会生成一个单独的build-test*目录是没有UI目录的,通过修改.pro,指定UI的头文件路径,它以后就老老实实的呆在那里了!QT +二 cor-e guiLgreaterThan(QT_MAJOR_VERSION.QT += iridgetsTARGET = teEt_myTEMPLATE = app而之前的错误是:Build-xxx目录下面有ui_xxx.h文件,t
20、est_my源目录下面也有ui_xxx.h文件。导致修改ui后的ui_xxx.h文件无法引用到工程中!所以一直导致ui不变化!源码目录:rootubuntu:st_w# 1snatn.cppnoc_widget.cpptest_w.prowidget.cppwidget.timain.omoc_wiLd9et-otest_w pro- userwidgetMakefileut_wldget-hwidget*aBuild-xxx 目录:rootubuntu: -/bjild test_w Desktop_Qt_S_5_&_GCC_3-Debug# Is main.D Makefile mocwi
21、dget.cpp moc_widget x test_w ui_widget.h widget.o2者不同步!通过强行制定UI_DIR来解决!1.1.3 Qt55的交叉编译1.1.3.1 ARM平台交叉编译Qt的版本:qt5.5,交叉工具链版本:gicc version 4.7*3 20121106 (prerelease) (crosstool-NG Linaro-l, 13.1-4*7-2912* 1120121123 - Linaro GCC 2012-11)rootfflubuntu:/opt/qt5/at-evervwhere-opensourcesrc-5.5.0#总结: 解压源码
22、,配置交叉工具链编译的东西在qtbase目录下,在mkspecs下面复制linux-arm-gnueabi-g+全部为 Linux-arm-qt5-notslibrootgubuntu: /opt/qtS/qt -everywhere-opensource -src -5*5.0/qtbase/nkspecs:# Is linu pm-*Itnux-arn-gnueebi-g+t:qnalce.conf qplatformdefs.hLinux-arm qt5-notslib:qmake* conf qplatformdefs * hrootgubuntu: /opt/qt5/qt -ever
23、ywhere-opensource -src -55- O/qtbase/nkspecs:# | 修改 qmake.conf2 蛰 qmake conffr building with arm-ltnux-gnuieabl-g+3 #45 MAKEIFILE_GENERATOR = UNIX6 config+言 incremental7 QMAKE_ I NCR EME NTA L_STY L E = Sdbltb9 一Z9 QT_QPA_DEFAULT_PLATFORM = ItnuxfbIS OMAKE_CFlACS_RELEaSE += - 02 -march=armv7-a -mtun
24、e=cDrtex- a& - me pu=cor tex - a 911 qmake_c xxr LAG5_R E LtAS E +言-02 -march=arnv7-a12 kJ13 xnclude( +, /cummcnn/linux a conf)14 tnclude( u. /co-mnon/gcc = base- untx. conf)15 T.nclude(*./cDmmcjLn/g+-umix*conf)IS17 尊 mod if teat tons to g + +-. coam-Itnux- gnueabilif- gcc arm linuK-gnueaibtlhf 咎 g+
25、 arm-Lirux-gnueabihf-g+ arn-llnux-gnueabthf-g+18 QMAKE.CC19 QMAKE_CKK20 QMAKELINK21 QMKIE_LINK_SHLIE2223 褂 nodi f kcatto* linijx aa rm = lin u x- gn uea bilhf a r eqs arm- lln u x - gnuea bllh f - ob j co py a rmllnu x-gnuea bihf-n n - p arm-Itnux-gffiuea btlh f-strip24 QMAKE_AR25 QMAKE_OBJCOPZG。呐KE
26、_帕27 QMAKE_STRIP2S load(qt_cofifi.g)-mthumb -march=armv7-aQt5的配置和Qt4的有太多的不一样。 配置选项B/configure -pr:-fk * */qt55-notsltl -tfcth Linux-arn-qtS-notslib e -confirn-license -openource -no-openssl -no-qnl-debug -qt-zlib -qt lib: -qt-lib jpeg -qt-freetype -qt-harfbuziz -qt-pcre -no-xeb -qt-xkbeonnon -no -ve
27、rboseno-iconv -skip qtwebkitnonakf toolst -no-cups这里./qt55-notslib换成绝对路径,不然它会在当前目录下生成qt55-notslib目录 或者改成./_install目录注意:./configure命令运行完成后,它会提示“make”,make install命令,但是在它之前会打 印很多Error,说什么找不到头文件,找不到sql等等。不管他,那些头文件,解压源码后根 本没有!在这里浪费了很多的时间。 编译makemake install就会在-prefix指定的目录下生成 虚拟机上设置qmake - arm的环境34 expor
28、t QT DIR/opt/qt5/q 15- a rm-n otslib35 export PATH=$PATH:$QTDIR/bin36 xport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib这样就可以交叉编译qt工程了。拷贝qt-arm库到开发板的rootfs文件系统,主要是这3个文件rootubuntu i/opt/altera-linux/rootfs-socfpga/opt/qt5# Isexamples ULb mkspccs plugins qtnlrootgubuntu i/opt/alteraltnux/rootfs-socfpga
29、/opt/qt5ff |设置开发板的qt环境变量12 export QTDIR=/opt/qt513 export QT_QPA_PLATFORM=Linuxfbifb=/dev/fbo14 export Qt2qpOlATF0RM_PLUGIN_PATH=$QTDIR/plugtns/platforms15 export QT_QPA_FONTDI/lib/fonts16 rexport qt_qpOvdev_house_parameters=/dev/lnput/event417 kxpot QT_QPA_EUOEvKEYBDARD_PARMETERS=/dev/input/ntlIS e
30、xport QT_QPA_GENERIC_PLUGINS=tsLib:/dev/touchscreen-lwire1920 export PATH=$QTDIR/bin:$PATH21 export LD_LIBRAR_PATH=$QTDIR/li.b:$2TDIR/plugi.ns/tmageformati$LD_LIBRAR_ PAT将它写成脚本,# . ./qt-board.sh在开机启动的时候加入,就可以了!rootubuntus/opt/dlteraltnux/ro&trs-?ocrpga./optqt-bd*rd,sh#L/bin/sh快Kpflt TSLIB-RQOTQpt/qt
31、e/tsltbjfexpflrt TSLie_TSEVlCE=/clev/lnpMt/tiMjehs.creem&ffexport TSLlOEV=/dev/event0ffexport TSLIB7cALIBFILE=/etc/pDintercalSteKport TSLI6Zc0NFFILE=$TSLIB_RQ0T/etc/tSrCinf#ex|Mrt TSLie_pluginoiR=$rsLiB_s:CKiT/itb/tsffexport TSLI6_COIi50LEDEVICE=noneffexport T5LIB_FBDEVIE=/dev/fbBtxpi&rt QTDIR=/0pt/
32、qt5export QT_QPA_PLATFCfiM=linuKfb: fb= /dev/ft6eXport OTJPAPLATFDKM_PLUGIN_PATH=$QTDIR/plugtns/platfoFISexport QT_QPA_FONrDIR=SQTDiR/Ub/fontsexport QT_QPA_EV&EV_MOUSE_PARANeters=/dev/input/ewent4export QT_QPA_EVDEV_KlEV&0AftD_PAftA)1 ETER5=/dev/input/eventlffexpDrt QT_PA_GENERIC_PLUGIIMS=tslib:/dev
33、/to-uchscreen-iwiretXp&rt PATH=$QTCIR/btAi$PATH豚LO-LlBRAftV_PATH=SQm旅八讪:pLugin 1 i安罪f。Fiats: SL0.LlBRAftV_PATH注意鼠标,键盘的变量和对应的设备节点内核默认是打开HID设备驱动的,如果找不到输入设备,看内核是否打开usb的HID支持! 如何确定设备节点?插入无线鼠标、键盘到usb 口,console检测到后,会打印信息出来。这个时候就可以看到。 确定是哪个?一般会出现2个,有1个是正确的。#cat /dev/input/eventl移动鼠标/按下键盘,有反应,打印乱码的就是它了!和Qt4不同的是,Qt5对键盘的设置是环境变量指定就行了,而Qt4还要在./configure中加