Qt移植说明文件
- 格式:doc
- 大小:133.50 KB
- 文档页数:9
QT移植到dm6446师兄让我作达芬奇系统下的一个界面程序,听说QT不错,所以几天前就试着把QT移植到dm6446上来。
去TI的论坛看了一个在omap3上的移植教程,看起来也不难,于是开始了我的移植过程。
1 首先去/downloads下载最新的QT原代码包:qt-everywhere-opensource-src-4.6.4.tar.gz可以将其放在/tmp目录下,然后解压/tmp$ tar zxvf qt-everywhere-opensource-src-4.7.3.tar.gz2 解压后,进入安装目录,然后需要配置交叉编译环境,由于dm6446用的不是普通的arm 编译器,所以要配置自己的交叉编译环境首先进入mkspecs/qws/目录/tmp/qt-everywhere-opensource-src-4.7.3$ cd mkspecs/qws/然后复制一下原来的linux-arm-g++目录到linux-dm6446-g++/tmp/qt-everywhere-opensource-src-4.7.3/mkspecs/qws$ cp -r linux-arm-g++ linux-dm6446-g+ +修改linux-dm6446-g++目录下的qmake.conf文件,将所有的arm-linux-替换成arm_v5t_le-,然后保存/tmp/qt-everywhere-opensource-src-4.7.3/mkspecs/qws$ cd linux-dm6446-g++//tmp/qt-everywhere-opensource-src-4.7.3/mkspecs/qws/linux-dm6446-g++$ vi qmake.conf在vi中,在命令模式下输入:%s/arm-linux-/arm_v5t_le-/g进行替换,然后输入:wq保存退出。
3 回到QT安装目录,进行QT的配置。
学习笔记----图形界面程序Qt安装及其在2410-s上的移植学习笔记----图形界面程序Qt安装及其在2410-s上的移植本文主要内容为编译器的安装,安装与建立Qt 桌面运行环境,Qt/E 的交叉编译,建立本机Qtopia 虚拟平台,Qtopia 2.1.1 在2410-S 上的移植.预备:编译器安装编译器: arm-linux-gcc-3.4.1.tar.bz2(软件从网上下载,如果不知道从什么地方下载,google就是了。
)把软件arm-linux-gcc-3.4.1.tar.bz2拷贝到/usr/local下,在终端执行如下命令安装:tar -xjf arm-linux-gcc-3.4.1.tar.bz2生成的编译工具在目录/usr/local/arm/3.4.1/bin下,修改/etc/profile,增加如下一行。
这可以让我们直接运行arm-linux-gcc,而不必将其绝对路径都写出来,不过这得重新启动后才生效:pathmunge /usr/local/arm/3.4.1/bin硬件:UP-NETARM2410S一. 安装与建立Qt 桌面运行环境软件:PC 机操作系统REDHAT LINUX 9.0 +MINICOM +ARM-LINUX 开发环境tmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gzqt-x11-2.3.2 .tar.gz软件从网上下载,如果不知道从什么地方下载,google就是了。
把本次实验用到的三个文件拷贝到/root/2410sQt目录下,以下的步骤是假设你在/root/2410sQt 下操作的。
Qt/Embedded 平台的搭建需要以下几步:第一步,解压安装包并设置环境变量tar –xzvf tmake-1.13.tar.gztar –xzvf qt-x11-2.3.2.tar.gztar –xzvfqt-embedded-2.3.10-free.tar.gzmv qt-2.3.10 qt-2.3.10-hostexportTMAKEDIR=$PWD/tmake-1.13export QT2DIR=$PWD/qt-2.3.2export QTEDIR=$PWD/qt-2.3.10-host环境变量的设置是非常重要的,它关系到能否正确的安装及编译这些安装包.注意: 在以下安装中,make命令执行前先执行一下make clean命令.第二步,编译Qt/Embedded。
迅为Qt移植移动4G模块第一部分1.首先要配置内核,这个一步和Android系统移植3G或者4G模块是一样的。
一般模块的厂家会提供移植文档,按照文档配置内核的ppp协议,USB转串,wcdma等,添加PID VID 即可。
这一步严格按照模块内核修改就行。
这里主要分析qt文件系统的修改,对内核不做过多的分析。
配置好的内核在开机后可以在dev下找到ttyUSB0-3的设备节点。
2.准备工作;下载ppp-2.4.4.tar.gz,这个我会上传。
①.解压:tar -vxf ppp-2.4.4.tar.gz。
②.运行configure,生成Makefile:./configure③.编译输入命令:make CC=arm-none-linux-gnueabi-gcc-4.4.1这里说明一下,CC=arm-none-linux-gnueabi-gcc-4.4.1是指明编译器,这里可以输入arm 然后双按tab键找自己的交叉编译器。
经过以上三步就会分别在chat、pppd、pppdump、pppstats中生成四个可执行文件chat、pppd、pppdump、pppstats,用于拨号。
3.以下操作是在qt文件系统,这里使用迅为提供的qt文件系统:rootfs.tgz①.解压rootfs.tgz:tar -vxf rootfs.tgz②.在etc中新建文件夹ppp③.把上面生成的四个可执行文件chat、pppd、pppdump、pppstats拷贝到ppp里面。
4.写配置文件①.在etc/ppp下文件pap-secrets:vim pap-secrets②.输入# Secrets for authentication using PAP# client server secret IP addressescard * card *在4G信号在通信时候有一个密码的比对,密码对了就可以通信了。
上面显示用户是card 密码是card③.在etc/ppp下新建文件夹peers:mkdir peers在peers里面新建文件wcdma:vim wcdma输入:# /etc/ppp/peers/wcdma# This is pppd script for China liantong# Usage: root>pppd call wcdmahide-passwordnoauthconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect' disconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect' debug/dev/ttyUSB2115200defaultroutenoipdefaultnovjnovjccompnoccpipcp-accept-localipcp-accept-remotelocallockdumpnodetachuser "card"password "card"crtsctsremotename 3gpppipparam 3gpppusepeerdns这里需要注意的是/dev/ttyUSB2,这句话要根据自己的情况而定,4G模块手册上应该会有些那个是用于AT指令,ppp拨号的。
QT4移植到FL2440开发板的详细过程(转载并加以修改)不知道是大家的系统环境不同还是网友们打错字了,我在网上找了不下十篇有关QT移植的文档。
文档大部分相同,但有一些不一样,但我全都试了,都有一些小问题!后来我一篇文档为主,其他文档为辅,对比错误,修改文档,得出这个适合我自己移植QT的完整版,这供大家参考!因为我的板子是飞凌的2440开发板。
网上关于qt4移植到飞凌2440的文章并不是很多,其中移植这部分我也走了很多弯路,遇到很多问题,但最后还是搞出来了,其实这过去也有快一个月了,那个时候也没时间写文章,但为了跟大家一同学习,今天特花了点时间把前面的经验写下来,希望能帮到各位,好了下面就开始我们的移植之旅吧!一、系统环境(蓝色是我的配置)宿主机:window xp sp3虚拟机linux centOS 或者fedora9,10linux编译器(交叉编译器):arm-linux-gcc 3.4.1开发板:飞凌2440--LCD 3.5寸系统linux-2.6.24(2.6.28也可以)2.6.12文件系统为yaffs系统所需软件包:arm-linux-gcc-3.4.1.tar.bz2 下载地址:/download/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2qt-embedded-linux-opensource-src-4.5.3.tar.gz下载地址大家到网上搜一下就出来了。
tslib-1.4.tar.gz(用于触摸验证)说明:说明一下这里为什么选择这些软件,首先fl2440板子需要编译器可以是2.95.3也可以使3.4.1这里我只是试了这两个,可能其他的也可以。
而qt/embeded则是我随便下了一个。
补充:这里为了说的完整些,我把qt的各版本也给大家说一下,关于Qt,Qt/E,Qtopia Core, Qtopia。
Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等。
Ubuntu下qwt安装及移植1.解压下载的qwt包:sudo tar –jxvf qwt-6.0.0.tar.bz22.cd qwt-6.0.03.环境变量设置:我们编译了两个版本的qt(x86版本和arm版本),如果在PC上运⾏,就需要⽤PC版本的qmake,arm上运⾏,就要⽤arm版本的qmake,具体做法:(1)Arm版本:① Sudo gedit ~/.bashrc在其中加⼊设置语句:exprot QTEDIR=/opt/arm/qtexport PATH=/opt/arm/qt/bin/:$PATHexport LD_LIBRARY_PATH=/opt/arm/qt/lib:$LD_LIBRARY_PATH②sudo gedit /etc/profile 在其中加⼊arm-Linux-gcc的路径:export PATH=/*/bin/:$PATH(2)X86的同样道理:注意:两个版本的都需要编译。
4.qmake –v查看qmake版本sudo make//编译出现错误,是关于⼀些Designer的头⽂件找不到,因为qwt⾃定义了⼀些designer的插件,⽅便我们进⾏开发,所以需要⼀些Qt Designer的头⽂件,打开qwtconfig⽬录下的qwtconfig.pri配置⽂件,屏蔽designer的编译。
有这条语句:CONFIG += QwtDesigner加“#”注释掉。
然后再编译就通过了。
另外,qwtconfig.pri⽂件中有以下⼀句:#CONFIG += QwtExamples这就是说⼯程默认是不编译⽰例程序的,要编译的话,就去掉注释,OK,编译完后会在qwt-5.2.1/examples⽬录下⽣成bin⽬录,下⾯就都是⽰例程序。
sudo make install5. 将⽣成的库⽂件变为全局可⽤cd /usr/local/libsudo ln -s /usr/local/qwt-6.0.1/lib/libqwt.so.6 libqwt.so.6sudo ldconfig//注意最后的ldconfig,是重新载⼊动态链接库的意思。
在HI3531上移植和运行QT4.8.61、前言:近段有点时间,想把QT移植到HI3531上,在网上查找了很多资料,但都不是很全面,有些有问题也没有得到很好的体现。
2、环境:PC:ubuntu10.04HI3531交叉工具链:arm-hisiv100nptl-linux-QT版本:qt4.8.6(Qt libraries 4.8.6 for embedded Linux (230 MB)QT-Creator版本:qt-creator-linux-x86-opensource-2.4.1.bin3、交叉编译:1)进入qt-everywhere-opensource-src-4.8.6/mkspecs/qws目录,新建linux-hisi3531nptl-g++目录,复制linux-arm-g++目录下的所有文件到linux-hisi3531nptl-g++cp –a linux-arm-g++/* linux-hisi3531nptl-g++2)进入linux-hisi3531nptl-g++,修改文件qmake.conf# modifications to g++.confQMAKE_CC = arm-hisiv100nptl-linux-gccQMAKE_CXX = arm-hisiv100nptl-linux-g++QMAKE_LINK = arm-hisiv100nptl-linux-g++QMAKE_LINK_SHLIB = arm-hisiv100nptl-linux-g++# modifications to linux.confQMAKE_AR = arm-hisiv100nptl-linux-ar cqsQMAKE_OBJCOPY = arm-hisiv100nptl-linux-objcopyQMAKE_STRIP = arm-hisiv100nptl-linux-strip3)打开文件qplatformdefs.h增加#undef O_CLOEXEC此处主要为解决:编译过程中找不到accept4函数问题4)安装X11库sudo apt-get install libX11-dev libXext-dev libXtst-dev5)返回源码目录qt-everywhere-opensource-src-4.8.6进行配置./configure --prefix=/opt/qt4.8.6 -opensource -confirm-license -qt-sql-sqlite -qt-gfx-linuxfb -plugin-sql-sqlit -no-qt3support -no-phonon -no-svg -no-webkit -no-javascript-jit -no-script -no-scripttools -no-declarative -no-declarative-debug -qt-zlib -no-gif -qt-libtiff -qt-libpng -no-libmng -qt-libjpeg -no-rpath -no-pch -no-3dnow -no-avx -no-neon -no-openssl -no-nis -no-cups -no-dbus -embedded arm -platform linux-g++ -xplatform qws/linux-hisi3531nptl-g++ -little-endian -qt-freetype -no-opengl -no-glib-nomake demos -nomake examples -nomake docs -nomake tools其中:--prefix=/opt/qte4.8.6 为交叉编译目标安装目录-xplatform qws/linux-hisi3531nptl-g++指定编译器及平台配置信息5)make6)make install4、PC编译:1)重新解压qt-everywhere-opensource-src-4.8.6.tar.gz,进行PC编译2)./ configure3)make4)make install5、安装QT开发环境1)sudo ./qt-creator-opensource-linux-x86-2.4.1.run2)下一步直到安装完成3)在应用程序,就可以看到QT Creator6、配置开发环境1)从PC的QT安装目录中拷贝如下文件到交叉编译目录cp /usr/local/Trolltech/Qt-4.8.6/bin/qml* /opt/qt4.8.6/bin/2)打开QT Creator3)打开工具-选项-QT版本4)打开添加按键,添加交叉编译的qmake5)进入工具链,打开添加按键,选择GCCE,在编译器路经选择arm-hisiv100nptl-linux-g++的路经到些就可以编译QT下自带的例子chip了,但这时在HI3531上还是不能显示的。
移植QT5.6到嵌⼊式开发板(史上最详细的QT移植教程)⽬前⽹上的⼤多数 QT 移植教程还都停留在 qt4.8 版本,或者还有更⽼的 Qtopia ,但是⽬前 Qt 已经发展到最新的 5.7 版本了,我个⼈也已经使⽤了很长⼀段时间的 qt5.6 for windows ,本⽂就来介绍⼀下QT在嵌⼊式环境的搭建。
移植以到 JZ2440 为例,使⽤韦⽼⼤提供的 ubuntu9.10 虚拟机作为移植环境。
当然,其它虚拟机也是可以的,我同样在 ubuntu14.04 移植成功,只不过需要额外装⼀些库,后⾯我会简单提及。
此外,我尝试使⽤ 4.3.2 版本的交叉编译⼯具编译 Qt5.6 ,编译过成功很多错误,编译成功之后使⽤ qt 编译应⽤程序时也存在问题,因此我是⽤的是友善提供的 4.4.3 版本的交叉编译⼯具。
建议新⼿使⽤与我相同的编译环境。
因为我们更换了编译⼯具,因此,我们有接下来的4个⼯作。
1、重新编译内核2、制作⽂件系统3、移植tslib4、移植qt⼀、更换交叉编译器⾸先,将下载好的⽂件全部放在 /work ⽬录下1、解压交叉编译器sudo tar zxvf arm-linux-gcc-4.4.3.tar.gz -C / #展开在根⽬录ls /opt/FriendlyARM/toolschain/4.4.3/bin #检查是否⽣成了编译⽬录2、设置环境变量sudo vi /etc/environment将现在原有的交叉编译器路径替换为我们新解压的交叉编译器,举例:1. #PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin"//注释2. PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/FriendlyARM/toolschain/4.4.3/bin" //增加后期测试时我发现这⾥是有问题的,由于我的安装⽬录都指定的是 usr ⽬录,需要 root 权限,然⽽在 environment 中设置的环境变量导致使⽤ root 权限 make install 过程中出现了个别的 command not found ,于是我将环境变量放到了 /etc/profile 中,这个⽂件是对所有⽤户⽣效的。
QT4编程及移植(系统移植之3)一、搭建Qt-creator环境QT开发工具被诺基亚收购后,由诺基亚对齐进行维护和技术支持。
目前诺基亚已经开发出一套界面整洁功能强大的QT IDE开发环境——QT-creator。
由于大多数人仍习惯Windows系统下的软件开发和设计,一下将以QT-creator Windows版本环境作为介绍(当然IDE也有Linux版本)。
1.1下载并安装QT-creator从网上下载qt-sdk-win-opensource-2010.02.1.exe文件,并在Windows下将其安装好。
1.2新建工程打开Qt Creator,点击File->new file or project,弹出以下窗口:点击Qt4 Gui Application->OK,弹出以下窗口:输入工程名、选择保存路径,点击Next,弹出以下窗口:这里是选择第三方库的支持,我们这个工程不需要这些,直接点击Next,弹出以下窗口:在Base class中选择QWidget,表示窗口部件以QWidget为基类,然后点击Next,弹出以下窗口:然后点击Finish完成工程创建,创建好的工程如下:双击打开main.cpp,编写代码如下:#include <QtGui/QApplication>#include <QHBoxLayout>#include <QSlider>#include <QSpinBox>#include "widget.h"int main(int argc, char *argv[]){QApplication a(argc, argv);//管理整个应用程序用到的资源QWidget *window = new QWidget;//创建一个QWidget,父窗口部件是QWidget window->setWindowTitle("Enter Your Age");//设置QWidget的标题QSpinBox *spinBox = new QSpinBox;//创建QSpinBoxQSlider *slider = new QSlider(Qt::Horizontal);//创建QSliderspinBox->setRange(0,130);slider->setRange(0,130);//以下两句关联信号和槽QObject::connect(spinBox,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));//以下两句使同步显示QObject::connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));spinBox->setValue(35);//初始化//以下做布局处理QHBoxLayout *layout = new QHBoxLayout;//水平排列,从左到右layout->addWidget(spinBox);layout->addWidget(slider);window->setLayout(layout);//在窗口上安装布局管理器window->show();//让窗口显示return a.exec();//将应用程序的控制权传递给QT}点击Qt Creator左下角的运行按钮(即第一个绿色三角形):显示效果如下:到这里已经完成了一个QT工程。
linux +qt4.7+opencv2.2移植到tq2440开发板以下操作在Fedora下使用超级用户进行我已经安装了交叉编译器arm-linux-gcc 4.3.3和qt4.5的x86和arm版本在目录/opt/EmbedSky下。
修改配置文件/etc/profile 添加pathmunge /opt/EmbedSky/4.3.3/bin安装CMakeOpenCV 2.1的版本,必须使用CMake创建Makefile。
我使用的CMake版本是2.6-Linux-i386的,是fedora 通过软件添加和载卸功能添加的(这个cmake要重新安装,而且要添加bin进去路径)编译OpenCV:1、解压OpenCV 2.1到/opt/EmbedSky/OpenCV-2.1.0目录下2、在超级用户下,运行cmake-gui命令选择源代码目录:/opt/EmbedSky/OpenCV-2.1.0选择Build目录:/home/pww71/opencv-arm/点击Configure,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next Operating System填写arm-inuxC Compilers选择/opt/EmbedSky/4.3.3/bin/arm-linux-gccC++ Compilers选择/opt/EmbedSky/4.3.3/bin/arm-linux-g++程序库的Target Root填写/opt/EmbedSky/4.3.3/,然后点击Finish修改默认配置,X86-opencv的cmake配置添加BUILD_EXAMPLES 和OPENCV_BUILD_3RDPARTY_LIBS 前面的日志已经介绍过了arm-opencv的cmake配置不要加BUILD_EXAMPLES 和OPENCV_BUILD_3RDPARTY_LIBS 和去掉WITH_TIFFCMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrtx86的opencv默认安装目录为/usr/local,对于arm的交叉编译的库来说并不合适,所以把CMAKE_INSTALL_PREFIX变量改为/usr/local/arm/lib/opencv/没有安装tiff图像的支持,去掉WITH_TIFF点击Generate生成Makefile3、使用超级用户进入目录/home/pww71/opencv-arm,运行make编译opencv4、运行make install,将opencv生成的库和头文件安装到目录/usr/local/arm/lib/opencv/QT的配置已经解压和安装了qt4.5的x86的库和arm交叉交叉编译的库安装qtcreator时记得安装地址并且修改配置文件/etc/profile 添加上qtcreator的安装地址的bin目录我的是pathmunge pathmunge /opt/EmbedSky/qtcreator-1.3.0/bin为了能找到qmake 还要添加路径pathmunge /opt/EmbedSky/qt-4.5/_install/x86/binpathmunge /opt/EmbedSky/qt-4.5/_install/am/bin到配置文件/etc/profile中使用超级用户输入命令source /etc/profile 后再执行qtcreator命令打开Qtcreator界面进入Tools-Options左侧选择QT4-Qt Versions 右侧选项里:如果通过软件添加和载卸工具添加了qt4的话Auto-detected会自动的选择Qt in PATH /usr/local/bin/qmake-qt4 用这个qmake工具生成的可执行文件不用添加-qws命令行参数自己安装的qt4.5 我是如下配置Qt in PATH /opt/EmbedSky/qt-4.5/_install/arm/bin/qmake添加Manual x86-qt-4.5.0 /opt/EmbedSky/qt-4.5/_install/x86/bin/qmake生成的可执行文件需要添加-qws命令行参数分别点击rebuild 最后点击okBuild Settings 中根据需要Add刚才配置的选择BUild configuration for ... 也选择相应的选项在QT工程文件.Pro中添加以下内容INCLUDEPATH += /usr/local/include/opencvLIBS += /usr/local/lib/libcv.so \/usr/local/lib/libcvaux.so \/usr/local/lib/libcxcore.so \/usr/local/lib/libhighgui.so \/usr/local/lib/libml.sopc仿真必须将以上库还要添加到项目文件夹里如果是arm开发板的程序则添加以下内容INCLUDEPATH += /usr/local/arm/lib/opencv/include/opencvLIBS += /usr/local/arm/lib/opencv/lib/libcv.so \/usr/local/arm/lib/opencv/lib/libcvaux.so \/usr/local/arm/lib/opencv/lib/libcxcore.so \/usr/local/arm/lib/opencv/lib/libhighgui.so \/usr/local/arm/lib/opencv/lib/libml.so编译生成可执行文件移植到开发板提示缺少什么库就按提示添加相应的图像库到lib中以及qt4.5的库和字体都添加到相应的目录中中间有一个这个提示QWSDisplay::Data::init: Invalid argumentClient can't attach to main ram memory.Aborted这个是表示缺少命令行参数-qws是Qt4的问题运行命令添加该参数ok一切正常注意的是qtcreator。
对于Qt4项⽬与Qt5项⽬移植时问题及解决⽅法1、Qt4项⽬迁移⾄Qt5项⽬:提⽰error:#include <QtGui/QApplication> No such file or directory原因:由于Qt5y源⽂件位置的改动.解决⽅法:①在.pro⽂件⾥,将Qt += core gui改为Qt += core gui widgets②.h⽂件⾥,#include <QtGui/QApplication>改为#include <QApplication>2、Qt4项⽬迁移⾄Qt5项⽬:提⽰error:’setCodecForTr’ is not a member of ‘QTextCodec’等错误.原因:由于Qt版本更新速度快,更新的同时有了许多的改动,在Qt5版本以前,很多⼈习惯⽤下⾯这三⾏(只要牵扯到中⽂,这三⾏就来了):QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));但是在Qt5中取消了:QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));解决⽅法:在程序中,main函数⾥将这两⾏代码注释掉就可以了.3、makefile 提⽰’multiple target patterns. Stop’原因:⼀般时由于Makefile中target那⼀⾏有多余的冒号(:),冒号在makefile中的作⽤是⽤于标识前⾯时⼀个编译的⽬标,如果有多余的冒号就会报错.解决⽅案:将程序中多余的冒号去掉即可.4、构建项⽬时报错:’QObject& QObject::(const QObject&)’ is private within this context.原因 :定义的是个QObject的⼦类,当将其的实例放⼊QT的容器(⽐如QList QHash等),就会报上⾯的错误.简单的说就是QObject的拷贝构造函数时私有的,当把其⼦类放⼊容器时⽆法完成构造其副本.解决⽅案:使⽤指针,将⾃定义的⼦类以指针的形式保存在容器中.⽐如:QList<MyObject *>list.5 qt5.x转为Qt4.8问题error:QtWidget/QAction:No such file or directory解决⽅法:将QtWidget换成QtGui6 qt5.x转为Qt4.8问题error:’class QHeader View’ has no member named ‘setSectionResizeMode’解决⽅法:是因为TableView之中的问题,在Qt5之后讲setResizeMode改成了setSectionResizeMode所以将section去掉即可7 qt5.x转为Qt4.8问题error:’itoa’ was not declared in this scope解决⽅法:itoa并⾮标准类库,将其换成sprintf(tmp,”%d”,i+1);⽤sprintf即可.8 qt5.x转为Qt4.8问题error:’QStingLiteral’ was not declared in this scope解决⽅法:问题出在TCPServerWindow->setObjectName(QStringLiteral(“TCPServerWindow”));这句话QT 4.8 setObjectName 没有QStringLiteral这个形参是QSTring 所以去掉这个QStringLiteral即可9 qt5.x转为Qt4.8问题error:‘Qt_5_6’ is not a member of ‘QDataStream’解决⽅法:当然Qt4.8怎么会有5.6 改成4.8以下即可10 构建项⽬时报错:error: 'staticMetaObject' is not a member of 'ygbaseprotocol'解决⽅法:在定义类时增加继承⾃QObject,如下:class ygbaseprotocol:public QObject{Q_OBJECT}。
一般而言,Qt应用程序的内容可分为Qt库的编译,Qt库的移植和基于Qt的应用程序的移植。
Qt库的编译所花费的耗线性时间代价是最长的,而Qt库的移植是比较简单的一个工作,只需要让串口发送数据到开发板上即可,笔者本人使用的是虚拟机提供的一个共享工具 wmwate-tools,在拷贝某些库的时候会出现不可以预知的错误,重试也无法解决这个问题,解决办法在于把库目录打包共享,这样的出错几率会比较低。
最后,应用程序的移植,这部分所花费的非线性时间应该是最长的,在移植调试的过程中将会出现很多很多未能预知的问题,详细的解答将会在本文末尾出做详细笔录。
1.编译的环境和所需要资源:Qt源码包:Qt4.6源码包:qt-everywhere-opensource-src-4.6.3.tar.gz /qt/source/qt-everywhere-opensourc e-src-4.6.3.tar.gz交叉编译工具: arm-linux-gcc 4.1.2 arm920t-eabi.tar.gz触摸屏校验工具: tslib1.4PC虚拟机运行的OS :CentOS-5.42.安装交叉编译器:主要是解压后要在设置交叉编译器的路径信息,即要为它设置一个环境变量。
把arm920t-eabi.tar.gz 放到/opt 目录下,解压该文件:# tar xzvf arm920t-eabi.tar.gz必须说明的是,网上转载该交叉编译器解压开来,产生的是一个/opt/toolchains/arm920t-eabi目录,在这里我们进行目录移动处理,把解压开来的/opt/toolchains/arm920t-eabi目录下面的/toolchains目录的所有内容剪切到系统/opt下面去,同时删除解压开来的/opt目录。
#gedit /root/.bashrc这是编辑/root/.bashrc文件的命令,在末行添加上交叉编译器的路径信息:使用source命令重新执行刚修改过的初始化文件,而不必重启机器。
# source /root/.bashrc#arm-linux-gcc -v 可以看到版本信息3.安装触摸屏校验工具:把tslib-1.4.tar.gz放到/opt目录下#tar xvzf tslib-1.4.tar.gz#cd tslib#./autogen.sh#./configure --prefix=/usr/local/tslib --host=arm-linux ac_cv_func_malloc_0_nonnull=yes#make#make install这样以后可以看到/usr/local/tslib下有了库文件,移植时会用到。
ps : host选项中malloc后面接着的是数字0,不是小写字母o.4.编译Qt-4.6.3库:首先要明确的是,我们需要编译3种不同类型的Qt库,这些库都由源码包qt-everywhere-opensource-src-4.6.3.tar.gz根据不同的配置选项编译而来。
# cd /opt把qt-everywhere-opensource-src-4.6.3.tar.gz复制到这个目录下面,并且解压成三份,并且重命名为Qt-4.6.3-pc,Qt-4.6.3-x86和Qt-4.6.3-arm。
另:图中FriendlyARM是新建的空目录,qtsdk-2010.04是QT Creator2.0的安装目录。
Toolchains是交叉编译器的安装目录。
1)进入qt-4.6.3-pc目录,直接运行configure信息并且编译,安装应用Qt库,在默认的情况下将会在/usr/local/Trolltech目录下生成Qt-4.6.3库目录。
# ./configure# gmake# gmake install修改.bashrc信息编译出来的基于PC机的Qt源码包大概是3.2 GB左右, Qt库大概是900+M本次编译出来的是914M,如果中间有出现什么情况终止了编译,那一定是一些系统库或者是工具没有安装好,在虚拟机装载系统的时候可以选择把大部分工具都装载进来。
2)进入qt-4.6.3-x86目录,输入编译嵌入式Qt库配置命令,并且进安装,在默认的情况下,将会在/usr/local/Trolltech产生嵌入式Qt库:QtEmbedded-4.6.3。
# ./configure -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb-qt-mouse-qvfb# gmake# gmake install安装下来的嵌入式Qt包大概有2.8G,Qt库大概是接近1G。
3)进入qt-4.6.3-arm目录,输入编译基于arm处理器的配置命令。
# ./configure -prefix/usr/local/Trolltech/QtEmbedded-4.6.3-arm -opensource-confirm-license -release -shared -embedded arm -xplatform qws/linux-arm-g++ -depths 16,18,24 -fast -optimized-qmake -pch -qt-sql-sqlite -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -little-endian -host-little-endian -no-qt3support -no-libtiff -no-libmng -no-opengl -no-mmx -no-sse -no-sse2 -no-3dnow-no-webkit -no-qvfb -no-phonon -no-nis -no-opengl -no-cups-no-glib -no-xcursor -no-xfixes -no-xrandr -no-xrender-no-separate-debug-info -nomake examples -nomake tools -nomake docs -qt-mouse-tslib -I/usr/local/tslib/include-L/usr/local/tslib/lib# gmake# gmake install编译顺利结束以后,将会在/usr/local/Trolltech/QtE-4.6.3-arm目录下面产生基于ARM处理器平台的Qt库,73M。
下图是编译出来的Qt库的一个容量信息。
在基于ARM的嵌入式版本的QT4安装成功以后,为了进行交叉编译,即在我们的PC机x86处理器上生成另一个处理器ARM可执行的文件,为此,需要一个脚本的文件的引导,内容如下:每次进行交叉编译之前,都必须执行这个脚本,执行命令如下:# source setenv-embedded.sh5.Qt库的移植:在对开发板的所有操作都必须在PC机的超级终端下完成,在超级终端上对各种文件的操作就是对基于ARM的嵌入式系统的操作。
在开发板的跟目录下新建两个目录:# mkdir mini2440# mkdir tslib不管用什么方法,可以选用串口或者是SD卡传输,把PC机下面的/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib目录下面的所有文件全部拷贝过来开发板的/mini2440目录下面,同时,把触摸屏校验工具的安装目录/usr/local/tslib下面所有的内容都拷贝到开发板的/tslib目录下面去。
在开发板上修改/tslib/etc下的ts.conf #module_raw input去掉#然后,删除多余的空格修改相关的环境变量信息:# vi /etc/profile在该文件末尾处输入如下环境变量信息:#export QTDIR=/mini2440#export T_ROOT=/tslib#export PATH=$QTDIR/bin:$PATH#export TSLIB_CONSOLEDEVICE=none#export TSLIB_FBDEVICE=/dev/fb0#export TSLIB_TSDEVICE=/dev/input/event0#export TSLIB_PLUGINDIR=$T_ROOT/lib/ts#export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf#export TSLIB_CALIBFILE=/etc/pointercal#export QWS_MOUSE_PROTO=tslib:/dev/input/event0 #export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib6.应用程序的移植:首先,进入PC机开发环境目录,即/opt/qt-4.6.3-pc,系统默认情况下已经使用了Qt库:Qt-4.6.3,若想改变所使用的Qt库,必须编写相关的脚本来指定所使用的Qt库。
# mkdir hello# cd hello# vi hello.cpp在hello.cpp中输入以下代码:#include <QApplication>#include <QPushButton>int main(int argc, char *argv[]){QApplication app(argc,argv);QPushButton b("Hello World !");b.show();QObject::connect(&b,SIGNAL(clicked()),&app,SLOT(quit() ));return app.exec();}执行一下命令:# qmake -project# make注:一、若qmake -project出现:程序“qmake”已包含在下列软件包中:* qt3-dev-tools* qt4-qmake请尝试:apt-get install <选定的软件包>那么要输入命令:apt-get install libqt4-dev安装qt的make工具该安装需在系统联网的情况下(配置联网参考,网络通信/总结(ubuntu的网络设置))二、或者加绝对路径/opt/qt-4.6.3-arm/bin/qmake –project 生成三、注:编译时要注意头文件的大小写(/opt/qt-4.6.3-arm/bin和/opt/qt-4.6.3-pc/bin中编译区别大小写,在/usr/local/Trolltech/QtEmbedded-4.6.3/bin/和/usr/local/Trolltech/QtEmbedded-4.6.3-arm/bin中不区别大小写)在make编译通过以后,在当前目录下将会产生一个名为hello的可执行文件,执行该可执行文件,将会在PC的显示器上显示出一个Hello world的GUI。