QT5的ARM移植及其中文显示.docx
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(qwtd-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 KmlpaHemsw'ald'Sior.wM Ji Ql5 WhEsb-BB.dl 叵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 QWTbProcwjiPXPQl5WrbKrtWidgetsd 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_plugin.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, lib(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(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下面就可以使用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/qt5/qwt-6k1.2/designer'install -ri 644 -p /opt/qt5/qwt-6 r L*2/qwtconfig < pri /usr/local/qvt-6.1k2/featuresrootubuntu:/usr/local/qwt-6.1,2# Is doc features include lib plugins, rootgubuntu:/usr/local/qwt-6.1.2# |安装qwt插件到ubuntu的qt-creatro中去一定要注意下面的这个路径:Qt5.5.0/Tools/QtCreatorrootgubuntu: /opt/(Jt5.5-0/Tools/QtCreator/bin/plugins/designer# Is libqdeclarattvevtew> 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 fTbqweGvtew.so libqquick'Mtdget .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 Support Aa ItbQtSP rtntSupportplLtbqvrtItbqwt»so.6Lt bqwt.so.6.1 lAbqwt .so.6.L.211.bQt5PrtntSuppcrt»so libQt5PrtntSuppcrt»so.5pkgconfigrootubuntu:/opt/Qt5.5.B/5.5/gcc/lib#新建1个Qwt的目录,拷贝头文件到里面qwt_plot_gLcanvas. hqwtransfDrm* hqwtplotgridhqwtwheel + hqwt_plot*hqwt_wtdget_ove rlay.hroatubuniu:/t>pt/QtS*5* 0/5*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 iREADMEQDtubuntu:,口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 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-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- <or guigr eaterTha n(QT_MAJ ORJ/E RSION f 4: QT widgetsTARGET 二 qwtFEUIPLATIE 二日 ppUI_DIR = .川ISOURCES += main, cppk mainwindow.cppHEADERS t二 main御inch虬hFORMS 4- mainwindoiv.uiiEHCLUDEPATO += /usr/local/qrtt-6a 1 .ZncludeLIB5 += -L'Vusr/local/qwt-G.1-IqwtL,在 Qt Creator 的 tool 菜单中选择 Form Editor-About Qt Designer plugins 查看是否安装了 libqwt_designer_plugin.so1.1.2 Qt5.5 的 ubuntu12.04 安装rootubuntj:/mnt/hgfs/qt_sdk# "qt- opensource-Linux-x86-5.5.6* run qt,network,s&L: QSslSocket: cannot resolve SSLvJ_client_method 'work*ssl: QSslSocket: cannot esolwe SSLv2_§ewe_neth(jd#apt-get install libssl0.9.81.1.2.1 ibus安装步骤第一步:安装语言包进入 “System Settings”,找到 “Language Support” 那一项,点击进入board lyouitLanguagesupport选择 “Install/Remove Languages”,找到 “Chinese (simplified)” 那一项,把后面到勾打上然后点击 “Apply Changes”Cancel由 Apply Changes等待一段时间即可第二步:安装Ibus框架调出 terminal 终端,输入命令:sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4启动Ibus框架,在终端下输入命令:im-switch -s ibusPS:安装完Ibus框架之后,记得重启或者注销系统,要保证更改生效才行哦第三步:安装拼音引擎有很多拼音引擎可供选择,一般安装一种就够了,比如我就直接安装的第一种Ibus 拼音:sudo apt-get install ibus-pinyinIbus 五笔:sudo apt-get install ibus-table-wubiGoogle 拼音:sudo apt-get install ibus-googlepinyinSun 拼音:sudo apt-get install ibus-sunpinyin第四步:设置Ibus框架在 terminal 中输入命令:ibus-setup执行之后,会自动调出一个Ibus Preference设置框,选择上面的“Input Method”ei Bys Prfere ncesIB-U$ Fw阮摩GcncroL input Meth-od Advancedinput Method Ad3 Customize activeinpwt methodsEnable of disableCcntrcil+ipsce: Zenkiku_H:| .Select a n input method青ddEnable:| Eh油的户*拼 Pinyin S un Pinyin 为B即g给i军 wubi-haiFenqa五 wubhjidian36PIS* W TlCffS -L6Disable:I.| 二|Hwt input method:PrewQv% ImDur 时i就hod: | ar,camdidlateE orrentatiiDn: Vertical.:ShawisaineLEmb司d ed Im menu:函 Show icon on system tray Showiwutnameon language barS Emb«l preedit tot inwlindowUse curtain font:辨 Chsw - PinyinThe -jaulirxthodis Efre top ojicvi the fts Ttw nwy ure晚询枷 birftiwig ft?亍枷员 itGoseClose选择相应的中文输入方式,然后点击“Add” 注意:最好是安装什么输入法就Add什么输入法 这里还可以设置调出相应输入法到快捷键,默认的是“Ctrl+Space 好了,中文输入法已经安装完毕最后推荐一个非常好用到截图工具:KSnapshot他能让人非常随意的截图,还能设置延迟时间,用了才知道他到底有多方便安装方法:调出terminal输入:sudo apt-get install ksnapshot并执行,等待一段时间后便可1.1.2.2中文输入法配置#locale -a查看是否有:zh_CN.utf8/etc/profile环境变量的设置,注意是ibus33394。414243export XMODIFIERS=flim=tbus export GTK_IM_NODULE=1.bus export QT_IM_MODULE=lbus export IBus & export Ibui &gxpcrt LC_CTYPE- zh_CN.utf系统的ibus设置位置rooitub(jntu/etc/Xll/xtnitt/xtnput + cl0 Isall_ALLdefault-xtnj a-_3Plo-gtknoneth_THzh_CNzh_SGdefaultibusko_KRlo_THth-gtkth-xtmzh_HKzh_TWgtbu(itu:/蜡比/XI 1/xinitkInputd# ,xin=lbu3xlH_PftOGRm=/u sr/bin/lbus-dm 冰 n XlH_AftG£-XHWIFlERS-etn-lbus1415na323-137GTK_IW_NQMJLE=xlm# use innuitQfy Sunfgr both CTK 2,0 and 3-P0IM_CONFIG_r*iARK.Efl2=6for I>1_CONFIG_IWKER Im /uer/Ltlbi/s/gtk-2-0/*/tnnodiilesfIn-tb*ie.aa /usr/lib/gtk-?.S/imFioidiiles/imibus,so ; d。If -e $IM_«JNFIG_HARKER s then IH_CQN F I_N/iAKER2-i break ft datieIN_COHFIG_ftARKEH3=a for IM_CONFIG_rW»KER 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 bnsa>k Ft done tf 5.IM_C0NFIG_riARKERZ = 1 5IM_CONF IKARKERS = 1 1 then.CTK lH_MClDUiLE-iti<H ftQT_lM_HODULE-XtP# (RncKiule sihenavailable for qt# (<jt3 hbeen long dead)for IW_C0NFIG_RAflKER In /usr/ltb/*/qt/plugl«is/tflputniethcids/ltbqttffl-tbiLis.s,o/usr/ lib/qugins i inputnEttiwis/litKitin- thus, so ; duIf | -e SIM CClNFIG MARKER |: thenQI_IM_m&ULE=ibus " break Ft doner ostgubuint u:/etc /Xll/ xtn it / xinpuit.1lfi - swit chSystem wide default for zh_CN locale isHnarked with +There ts 1 choice for the altektn|>iiit«zh_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-us<6。nanual n&dePress enter to keep the current choicer*!- or type selection number:需要支持utf-8中文环境没有试过设置中文环境很简单,需要三步。第一步,安装中文包:sudo apt-get install language-pack-zh language-pack-zh-base第二步,配置相关环境变量:sudo vim /etc/environment在文件中增加语言和编码的设置:LANG=”zh_CN.UTF-8LANGUAGE=”zh_CN:zh:en_US:en”第三步,重新设置本地配置:sudo dpkg-reconfigure localesUbuntu12的gnome主题安装#apt-get install gnome-shell ,本用它解决qt-creator的ui不更新问题,结果没有作用。解决linux下的ui界面不更新的方法:项目设置文件.pro内增加UI_DIR=./UI,同时删除掉源代码目录中ui_*.h, clear all,->qmake->rebuilt all总结:导致ui_*.h文件没有更新的原因是源代码中#include ui_*.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-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文件,test_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 mocwidget.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#总结: 解压源码,配置交叉工具链编译的东西在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 -everywhere-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 -mtune=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+ 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_OBJCOP¥ZG。呐KE_帕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 -verboseno-iconv -skip qtwebkitnonakf toolst -no-cups这里./qt55-notslib换成绝对路径,不然它会在当前目录下生成qt55-notslib目录 或者改成./_install目录注意:./configure命令运行完成后,它会提示“make”,"make install命令,但是在它之前会打 印很多Error,说什么找不到头文件,找不到sql等等。不管他,那些头文件,解压源码后根 本没有!在这里浪费了很多的时间。 编译makemake install就会在-prefix指定的目录下生成 虚拟机上设置qmake - arm的环境34 export 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/altera'ltnux/rootfs-socfpga/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 export QT_QPA_GENERIC_PLUGINS=tsLib:/dev/touchscreen-lwire1920 export PATH=$QTDIR/bin:$PATH21 export LD_LIBRAR¥_PATH=$QTDIR/li.b:$2TDIR/plugi.ns/tmageformat£i$LD_LIBRAR¥_ PAT将它写成脚本,# . ./qt-board.sh在开机启动的时候加入,就可以了!rootubuntus/opt/dlteraltnux/ro&trs-?ocrpga./opt"qt-bd*rd,sh#L/bin/sh快Kpflt TSLIB-RQOTQpt/qte/tsltbjfexpflrt TSLie_TS>EVlCE=/clev/lnpMt/tiMjehs.creem&ffexport TSLlOEV£=/dev/event0ffexport TSLIB7cALIBFILE=/etc/pDintercalSteKport TSLI6Zc0NFFILE=$TSLIB_RQ0T/etc/tSrCi>nf#ex|Mrt TSLie_pluginoiR=$rsLiB_s:CKiT/itb/tsffexport TSLI6_COIi50LEDEVICE=noneffexport T5LIB_FBDEVIE=/dev/fbBtxpi&rt QTDIR=/0pt/qt5export QT_QPA_PLATFCfiM=linuKfb: fb= /dev/ft>6eXport 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/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中加