QT5的ARM移植及其中文显示.docx

上传人:b****5 文档编号:8509836 上传时间:2023-01-31 格式:DOCX 页数:19 大小:1.33MB
下载 相关 举报
QT5的ARM移植及其中文显示.docx_第1页
第1页 / 共19页
QT5的ARM移植及其中文显示.docx_第2页
第2页 / 共19页
QT5的ARM移植及其中文显示.docx_第3页
第3页 / 共19页
QT5的ARM移植及其中文显示.docx_第4页
第4页 / 共19页
QT5的ARM移植及其中文显示.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

QT5的ARM移植及其中文显示.docx

《QT5的ARM移植及其中文显示.docx》由会员分享,可在线阅读,更多相关《QT5的ARM移植及其中文显示.docx(19页珍藏版)》请在冰豆网上搜索。

QT5的ARM移植及其中文显示.docx

QT5的ARM移植及其中文显示

1.1QT5的移植

1.1.1Qwt6的配置

1.1.1.1Win7平台的qwt插件安装

qwt源码下载:

因为官方的qtcreator是用msvc编译的,不能识别mingw编译的qwt,所以需要将qtcreator的源码用mingw编译一次。

Qtcreator(msvc2013版)+vs2013+qwt的配置

编译qwt库

我用的qt5.4-msvc版本直接打开qwt的pro工程,编译全部,生成lib和dll文件

配置

(1)将qwtd.dll、qwt.dll拷贝到H:

\Qt\Qt5.4.0\5.4\msvc2013_64_opengl\bin下,

   将qwtd.lib、qwt.lib拷贝H:

\Qt\Qt5.4.0\5.4\msvc2013_64_opengl\lib下(以qt安装目录H:

\Qt\Qt5.4.0\5.4\msvc2013_64_opengl为例)。

(2)将qwt_designer_plugin.dll和qwt_designer_plugin.lib拷贝到H:

\Qt\Qt5.4.0\5.4\msvc2013_64_opengl\plugins\designer目录下。

(3)将qwt\src目录下的所有.h和.cpp放入一个空文件夹QWT中,再将该文件夹拷贝到H:

\Qt\Qt5.4.0\5.4\msvc2013_64_opengl\include目录下。

使用

    新建项目,然后进行配置:

(1)属性->配置属性->C/C++->常规,附加包含目录:

$(QTDIR)\include\QWT

(2)属性->配置属性->链接器->输入,附加依赖项:

qwtd.lib

(3)属性->配置属性->C/C++->预处理器,预处理器定义:

QWT_DLL

1.1.1.2Ubuntu平台的qwt插件安装

GCC的qmake

建立gcc版本的qmake软链接

将gcc-qmake放到/usr/bin下面就可以使用gcc-qmake了。

为了和ARM版本的qmake区别!

删除链接

那么我就可以在ubuntu下面编译qwt了。

因为我用qt-creator打开qwt.pro后,builder后不知道在哪里生成了哪些东西。

进入qwt-6.1.2目录

只好用qmake手动编译了。

#gcc-qmake

#make

#makeinstall

就会在/usr/local下面生成

安装qwt插件到ubuntu的qt-creatro中去

一定要注意下面的这个路径:

Qt5.5.0/Tools/QtCreator

折腾了半天,就是掉了这个路径

还有另外的一个路径:

下面的暂时不要这么做,因为不晓得在qt-creator如何应用头文件,还是先直接引用

/usr/local/qwt-6.1.2/lib+include吧

另外拷贝/usr/local/qwt-6.1.2/lib下面的4个库到相应的目录

新建1个Qwt的目录,拷贝头文件到里面

Qwt的交叉编译

我的qt库交叉版本没有使能opengl选项,所以qmake,make出现错误!

找不到opengl模块

配置qwt,重要的配置文件qwtconfig.pri

修改qwtconfig.pri,里面可以设置install的路径,去除

需要注释如下的编译选项,编译armqt时,没有支持opengl。

#QWT_CONFIG    +=QwtOpenGL

第二,需要注释如下的编译选项:

#QWT_CONFIG    +=QwtDesigner

同时修改安装路径为:

避免和gcc版本的混淆

当然需要安装到开发板上面,才能运行。

1.1.1.3Qwt的使用

INCLUDEPATH+=/usr/local/qwt-6.1.2/include

LIBS+=-L"/usr/local/qwt-6.1.2/lib/"–lqwt

看下面:

在QtCreator的tool菜单中选择FormEditor-》AboutQtDesignerplugins查看是否安装了libqwt_designer_plugin.so

1.1.2Qt5.5的ubuntu12.04安装

#apt-getinstalllibssl0.9.8

1.1.2.1ibus安装步骤

第一步:

安装语言包

进入“SystemSettings”,找到“LanguageSupport”那一项,点击进入

选择“Install/RemoveLanguages”,找到“Chinese(simplified)”那一项,把后面到勾打上

然后点击“ApplyChanges”

等待一段时间即可

第二步:

安装Ibus框架

调出terminal终端,输入命令:

 sudoapt-getinstallibusibus-clutteribus-gtkibus-gtk3ibus-qt4

启动Ibus框架,在终端下输入命令:

im-switch-sibus

PS:

安装完Ibus框架之后,记得重启或者注销系统,要保证更改生效才行哦

第三步:

安装拼音引擎

有很多拼音引擎可供选择,一般安装一种就够了,比如我就直接安装的第一种

Ibus拼音:

sudoapt-getinstallibus-pinyin

Ibus五笔:

sudoapt-getinstallibus-table-wubi

Google拼音:

sudoapt-getinstallibus-googlepinyin

Sun拼音:

sudoapt-getinstallibus-sunpinyin

第四步:

设置Ibus框架

在 terminal中输入命令:

ibus-setup

执行之后,会自动调出一个IbusPreference设置框,选择上面的“InputMethod”

选择相应的中文输入方式,然后点击“Add”

注意:

最好是安装什么输入法就Add什么输入法

这里还可以设置调出相应输入法到快捷键,默认的是 “Ctrl+Space”

好了,中文输入法已经安装完毕

最后推荐一个非常好用到截图工具:

KSnapshot

他能让人非常随意的截图,还能设置延迟时间,用了才知道他到底有多方便

安装方法:

调出terminal输入:

sudoapt-getinstallksnapshot 并执行,等待一段时间后便可

1.1.2.2中文输入法配置

#locale–a

查看是否有:

zh_CN.utf8

/etc/profile环境变量的设置,注意是ibus

系统的ibus设置位置

需要支持utf-8中文环境[没有试过]

设置中文环境很简单,需要三步。

第一步,安装中文包:

sudoapt-getinstalllanguage-pack-zhlanguage-pack-zh-base

第二步,配置相关环境变量:

sudovim/etc/environment

在文件中增加语言和编码的设置:

LANG=”zh_CN.UTF-8″

LANGUAGE=”zh_CN:

zh:

en_US:

en”

第三步,重新设置本地配置:

sudodpkg-reconfigurelocales

1.1.2.3UI界面不更新问题

Ubuntu12的gnome主题安装

#apt-getinstallgnome-shell,本用它解决qt-creator的ui不更新问题,结果没有作用。

解决linux下的ui界面不更新的方法:

项目设置文件.pro内增加UI_DIR=./UI,同时删除掉源代码目录中ui_*.h,clearall,->qmake->rebuiltall

总结:

导致ui_*.h文件没有更新的原因是源代码中#includeui_*.h的位置和实际生成的位置不同,引用的是老的ui_*.h,设置UI_DIR后就规定了位置于是不会出错了。

确实如此:

操作一次后,以后就立即生效了。

新建工程的时候,会生成一个单独的build-test***目录

是没有UI目录的,通过修改.pro,指定UI的头文件路径,它以后就老老实实的呆在那里了!

而之前的错误是:

Build-xxx目录下面有ui_xxx.h文件,test_my源目录下面也有ui_xxx.h文件。

导致修改ui后的ui_xxx.h文件无法引用到工程中!

所以一直导致ui不变化!

源码目录:

Build-xxx目录:

2者不同步!

通过强行制定UI_DIR来解决!

1.1.3Qt5.5的交叉编译

1.1.3.1ARM平台交叉编译

Qt的版本:

qt5.5,交叉工具链版本:

总结:

1解压源码,配置交叉工具链

编译的东西在qtbase目录下,在mkspecs下面复制linux-arm-gnueabi-g++全部为

Linux-arm-qt5-notslib

2修改qmake.conf

-mthumb-march=armv7-a

Qt5的配置和Qt4的有太多的不一样。

③配置选项

./configure-prefix/opt/qt-5.3.2-arm-xplatformLinux-arm-qt5.3.1-notslib-release-confirm-license-opensource-no-openssl-no-qml-debug-qt-zlib-qt-libpng-qt-libjpeg-qt-freetype-qt-harfbuzz-qt-pcre-no-xcb-qt-xkbcommon-no-opengl-no-pch-verbose-no-kms-no-eglfs-no-icu-no-icu-no-iconv-skipqtwebkit-no-gcc-sysroot-no-largefile-no-nis-nomaketools-no-compile-examples-no-c++11-no-cups

这里../qt55-notslib换成绝对路径,不然它会在当前目录下生成qt55-notslib目录

或者改成./_install目录

注意:

./configure命令运行完成后,它会提示“make”,”makeinstall”命令,但是在它之前会打印很多Error,说什么找不到头文件,找不到sql等等。

不管他,那些头文件,解压源码后根本没有!

在这里浪费了很多的时间。

1编译

make

makeinstall就会在-prefix指定的目录下生成

2虚拟机上设置qmake–arm的环境

这样就可以交叉编译qt工程了。

拷贝qt-arm库到开发板的rootfs文件系统,主要是这3个文件

设置开发板的qt环境变量

将它写成脚本,#../qt-board.sh在开机启动的时候加入,就可以了!

注意鼠标,键盘的变量和对应的设备节点

内核默认是打开HID设备驱动的,如果找不到输入设备,看内核是否打开usb的HID支持!

如何确定设备节点?

插入无线鼠标、键盘到usb口,console检测到后,会打印信息出来。

这个时候就可以看到。

确定是哪个?

一般会出现2个,有1个是正确的。

#cat/dev/input/event1移动鼠标/按下键盘,有反应,打印乱码的就是它了!

和Qt4不同的是,Qt5对键盘的设置是环境变量指定就行了,而Qt4还要在./configure中加入键盘,鼠标的选项来支持!

问题又来了:

默认Qt5的显示是看不到鼠标的?

暂时打开:

嵌入式linux的相关设置

http:

//doc.qt.io/qt-5/embedded-linux.html#configuring-for-a-specific-device

QT_QPA_PLATFORM=linuxfb:

fb=/dev/fb1 specifiesthattheframebufferdevice /dev/fb1 

size=x - 

ParameterslikethedevicenodenamecanbesetintheenvironmentvariablesQT_QPA_EVDEV_MOUSE_PARAMETERS, QT_QPA_EVDEV_KEYBOARD_PARAMETERS andQT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS. 

Additionally,thebuilt-ininputhandlerscanbedisabledbysetting QT_QPA_EGLFS_DISABLE_INPUT or QT_QPA_FB_DISABLE_INPUT to 1

屏幕旋转

Onsometouchscreensthecoordinateswillneedtoberotated.ThiscanbeenabledbysettingQT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS to rotate=180.

QT_QPA_FB_HIDECURSOR (forlinuxfb) 关闭鼠标

exportQT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS="rotate=180"

exportQT_QPA_PLATFORM=linuxfb:

fb=/dev/fb0,size=480x272 

1.1.3.2x86平台的交叉编译

#输入qvfb,提示要安装包

#apt-getinsall就可以了。

1.1.3.3qt的中文输入法

1.1.3.4字体转换工具

Qt5.5的源码就包含这个工具

Qtcomeswiththecross-platform makeqpf tool,includedinthe tools directory,whichallowsgenerationofQPF2filesfromsystemfonts.

在Linux中分别安装应用于不同平台的Qt:

PC;嵌入式X86;ARM。

这三者PC版、嵌入式X86版和ARM版的区别主要体现在:

当configure时分别加了不同的参数,具体区别是:

PC平台(X11平台):

在linux中全安装qt,用它编译好程序后,直接用“./”就可运行。

嵌入式X86平台:

带有qvfb功能,在PC机上可以模拟应用程序在arm开发板上的运行情况。

用此编译好的程序,只用“./”命令不可以运行,必须加上参数[-qvfb]–qws

Ps:

嵌入式X86平台,这个是PC下的一个qtopia,他自带有个模拟器,可以模拟出arm开发板的样子出来。

方便调试;

ARM平台:

编译好的程序,用于在arm平台上运行。

Ps:

ARM平台,这个主要是用来编译,因为要下载到开发板上,需要arm版的qte的库文件,编译后直接下载到开发板运行;

Ps:

编译x86是为了得到makeqpf,编译pc是为了得到qvfb

我是如何编译makeqpf的

Qvfb好编译,直接在#输入qvfb,提示缺失什么,就#apt-getinstall就行了。

问题是怎么编译embedded–x86版本的?

它对应的编译器是什么?

网上找不到,都是qt4的。

没有办法,试试。

解压qt5.5-everywhere-xxx的源码,改为qt-5.5-src-x86,qt5-x86为编译后的安装目录

配置qt5.5

注意:

一点要有-qt-xcb插件,不然makeqpf无法运行的。

我编译了2个小时,没有xcb插件!

怎么搞?

从来?

单独的编译xcb插件,如果忘记了配置,直接进入它的目录,#make,#makeinstall就行了。

这里就是xcb插件的目录,在它下面qmake,make,makeinstall

这里的gcc-qmake就是我再ubuntu下面安装的qt5.5-creator后的qmake,gcc-qmake是他的软连接

设置好/etc/profile的qt-x86的LD库和插件的路径

把所有用到的汉字写到一个文本文件里,在makeqpf(Qt4)里选择这个文件,生成的字体文件就很小。

准备要转换的字体文件,可在C:

\WINDOWS\Fonts 下找,或者去下载。

  

这里我们是下载的wqy-zenhei.ttf。

将wqy-zenhei.ttf字体文件拷贝到/usr/local/Trolltech/qt-4.7.0-x86/lib/fonts中,这样是为了在makeqpf中找到它

旋转字体库的制作

使用带参数的方式执行makeqpf,如

./makeqpf -display Transformed:

Rot90  

以上指令用于制作翻转90度的字库文件,制作其它的字库文件只需将270改为90,180,0等

注:

在$(QTDIR)/lib/fonts/目录下的qpf字体文件中,文件名中带有t5,t10,t15等后缀的为旋转字体库,t5为旋转90度,t10为旋转180度,t15为旋转270度。

如wenquanyi_160_50_t5.qpf 

1.1.3.5Qt的中文ARM显示

Qtnormallyuses fontconfig toprovideaccesstosystemfonts.If fontconfig isnotavailable,e.g.indedicatedembeddedsystemswherespaceisatapremium,QtwillfallbacktousingQBasicFontDatabase.Inthiscase,QtapplicationswilllookforfontsinQt's lib/fonts/ directory.QtwillautomaticallydetectprerenderedfontsandTrueTypefonts.

Qt的配置相关:

-no-fontconfig.....DonotcompileFontConfigsupport.

+-fontconfig........CompileFontConfigsupport.

嵌入式里面如果没有配置fontconfig,那么它就会在lib/fonts目录下面找字体,默认不配置。

已经摸索出解决方案【验证不成功,返回-1】

#include 

int main(int argc, char *argv[])

{

    QApplication a(argc, argv);    

int nIndex = QFontDatabase:

:

addApplicationFont("./Resources/msyh.ttf");

//这里我加载返回-1,加载qpf2的字体不成功

if (nIndex !

= -1)

{

QStringList strList(QFontDatabase:

:

applicationFontFamilies(nIndex));

if (strList.count() > 0)

{

QFont fontThis(strList.at(0));

fontThis.setPointSize(9);

a.setFont(fontThis);

}

}

    ....................

}

我的验证正确的过程:

这样是可以显示中文的

最后测试:

不需要

//QTextCodec:

:

setCodecForLocale(QTextCodec:

:

codecForName("UTF-8"));

也可以,ui->lineEdit->setText(QString:

:

fromLocal8Bit("我爱你我的祖国"));显示乱码

ui->lineEdit->setText(QObject:

:

trUtf8("我爱你我的龚晗玥"));//显示正常

我用的字库

为什么下载的wenquanyi字体和我自己用makeqpf制作的qpf2字体无法识别?

Wqy-zenhei.ttc是从ubuntu12里面拷贝出来的。

它就能识别

Ubuntu下面的字体路径

测试我的程序:

输出它能找到的字体

注意设置font的名字要和这里的打印的全称一致!

进一步的测试:

直接将win7下面的ttf中文字体拷贝到arm板子的fonts下面就能识别,如上图:

“LiSu”,“STLite”

Qt5是有bug的,不识别Qpf字体,害我折腾了好几天!

AccordingtothedocumentationQPFisonlysupportedwhenusingthebasicfontdatabase,bydefaultlinuxwouldusethefontconfigfontdatabase.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1