qtopia4.3.2移植
- 格式:pdf
- 大小:98.04 KB
- 文档页数:5
著名的QT库前一阵子升级到4.xx版本了,我目前在开发的一个基于QT3的软件,由于受到QThread的各种困扰,因此打算尝试将代码升级到QT4,但是当我实际开始升级工作后,才发现QT3和QT4的变化实在是太大了,最后导致我几乎修改了程序中的所有文件,幸好目前开发工作还只是开了个头,只修改了40多个类,但那也足足花了我一周多时间,下面简单的说说QT3升级到QT4时的注意点:1)QT4中提供了大量新控件,虽然它也保持了旧的控件,并命名为Qt3XXX,但是这样的控件没准在今后的哪个QT版本中就不被支持了,所以还是换吧,控件替换的工作是巨大的,这些新的控件使用了新的方法、属性、和事件名称,虽然是比以前更规范了,但是对于升级旧代码来说,则增加了大量工作。
2)既然要更新控件,那么你就需要使用QDesigner工具来重新画界面了,OK,重画只是纯体力劳动,好说。
界面画好后,使用uic来根据界面生成代码文件,QT3的uic可以自动生成.h和.cpp文件,假设你在制作一个名叫TestDialog的对话框,那么QT3的uic生成的文件则是TestDialog.h和TestDialog.cpp,所有的界面初始化工作都在cpp文件中执行,之后程序的逻辑代码也将加入这个文件,那么对于一个已经完成逻辑功能的对话框来说,如果要修改界面布局,你就不得不重新用uic生成.h和.cpp文件,然后将其中界面相关的代码复制到你已经修改的文件中,此时决不能直接用uic直接生成到修改过的文件上,因为那样你的代码将全部被冲掉。
这一点上,QT4进步了,因为QT4中推荐的方法是,使用uic根据界面文件生成一个h 文件,以前面的TestDialog为例,生成的文件叫做ui_TestDialog.h,其中会实现一个名为Ui_TestDialog的类,包含了界面所有控件的加载功能,而程序的逻辑功能依然使用TestDialog.h,和TestDialog.cpp这两个功能,并在TestDialog.h中用多重继承的方法,从刚才的Ui_TestDialog类来继承出实际的TestDialog类,在TestDialog的构造函数中,只需要使用Ui_TestDialog::setupUi()方法,就可以构建出整个界面,并且由于是从Ui_TestDialog继承来的,在逻辑代码中也可以方便的访问所有控件。
嵌入式技术基础基于ARM6410的Qtopia 4.4.3的移植(嵌入式设计报告)院( 系 ) 信息工程学院专业名称班级学号学生姓名指导教师二O一一年六月摘要图形用户界面的广泛应用是当今计算机技术的重大成就之一,它极大地方便了非专业用户的使用。
在嵌入式系统中,GUI(图形用户界面)是嵌入式实时操作系统的重要组成部分,作为人机互交技术的重要内容,以其丰富的图形图像信息和直观的表达方式与用户互交,被越来越多的嵌入式系统所采用,现在已经成为当今嵌入式领域的发展焦点。
虽然市场上现在已经有了众多的优秀的GUI应用软件,但随着近年来计算机技术的迅速发展,当新硬件、新技术出现时,计算机的体系结构、指令系统和操作系统都可能发生相应的改变,这势必会导致一部分应用软件在新环境下无法正常运行。
如果舍弃原有软件而重新开发,将会耗费大量的人力和资金,而且浪费了许多成熟的软件成果。
而Qt在源代码级上实现了跨平台特性,极大的支持了跨平台通用软件的开发。
Qt可以用同一个源程序在不同平台上编译链接,生成目标代码,并取得相同的运行效果,称为“一次编写,随处编译”,利用这种方法充分实现了程序的跨平台运行。
这种基于源代码的跨平台特性不仅解决了性能的问题,而且可以发挥各个平台的优势,充分利用每个平台自身的特点;并且即可以在新环境下实现原有软件的功能和特点,减少开发费用,还可以改进原有软件的不足,增加新的需求,从而提高软件的质量,延长软件生命期。
因此,基于Qt的嵌入式应用程序开发是一个非常有意义的课题,完成了嵌入式图形用户界面开发良好的人机交互界面是嵌入式系统设计的一个关键技术,具有一定的实用意义和价值。
关键词:嵌入式QT 图形用户界面人机交互目录摘要 (II)1.绪论 (1)1.1 课题研究背景和意义 (1)1.2 嵌入式技术发展现状 (2)1.3 嵌入式的发展趋势 (2)2.Qt开发工具简介 (4)2.1 Linux的简介 (4)2.2 QT 的简介 (5)2.3Q t编程机制简介 (5)2.4 常用的两种用户图形界面的简介 (8)3.处理器的概述 (9)4.Qtopia 4.4.3的移植设计 (10)4.1Tslib 1.4的编译 (10)4.2Qtopia4.4.3的编译 (12)4.3Qtopia4.4.3的使用 (13)4.4运行Qtopia4.4.3 (14)4.5Qtopia4.4.3的演示效果 (15)5总结 (16)6参考文献 (17)附录一网络文件系统的挂载 (19)1.绪论1.1 课题研究背景和意义随着嵌入式产品的发展,往往要求嵌入式操作系统有网络和图形的功能。
操作系统 debian5.0.1编译器 arm-linux-gcc-4.3.2先移植 tslib安装三个工具apt-get install autoconf automake libtool运行脚本./autogen.sh 注(不知道为什么,这行脚本中有 echo 但是终端不显示)3帧缓冲文件以及配置echo "ac_cv_func_malloc_0_nonnull=yes" >$ARCH_tslib.cache避免检查ac_cv_func_malloc_0_nonnull,如果不写这句,在Make时候会出现undefined reference to `rpl_malloc' 的错误。
./configure --prefix=/home/tslib --host=arm-linux--cache-file=$ARCH_tslib.cache --enable-inputapi=nomakemake install此时会在/home/tslib 目录中有东西出来,把 tslib 目录拷贝到开发板目录下的/home 目录中在开发板中配置环境变量export TSLIB_ROOT=/home/tslibexport TSLIB_TSDEVICE=/dev/event0 #(某些好像是 /dev/input/event0) 看实际情况来确定export TSLIB_CALIBFILE=/etc/pointercalexport TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.confexport TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/tsexport TSLIB_CONSOLEDEVICE=noneexport TSLIB_FBDEVICE=/dev/fb0 #(某些好像是 /dev/fb/0) 看实际情况来确定export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib下面是Tslib 1.4中的ts.conf的参考配置:# Uncomment if you wish to use the linux input layer event interface# module_raw input把#去掉在开发板中进入 /home/tslib/bin 运行./ts_calibrate如果没问题,此时屏幕能正确校准,如果有问题不能运行或者其它,请赶紧删掉重做吧.再移植 qt embedded我的配置参数如下:(./configure -prefix / usr/local/Trolltech/QtEmbedded-4.6.2-arm-release -shared -fast -no-largefile -qt-sql-sqlite-no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse-no-sse2 -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff-qt-libpng -qt-libjpeg -make libs -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -embedded arm -little-endian-qt-freetype -depths 16 -qt-gfx-linuxfb -qt-gfx-transformed-qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-usb-no-glib -armfpa -qt-mouse-tslib -I/tslib-1.4/inclued-L/tslib-1.4/lib)(./configure -prefix /usr/local/Trolltech/QtEmbedded-4.6.2-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-openssl -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)./configure -prefix /mini2440 -release -shared -fast -xplatform qws/linux-arm-g++ -embedded arm -depths 16 -fast -pch-no-qt3support -no-sql-sqlite -no-libtiff -no-libmng-qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -no-openssl-qt-mouse-tslib -no-mouse-pc -no-mouse-linuxtp有一些我很疑惑,我明明 '-qt-mouse-tslib' 参数,但我却不向别人那样使用-I -L 指定头与库,配置也不报错...很郁闷...不过,不出问题,我不管它,继续.make -C src/make install此时会在 /mini2440 目录中生成头文件与库,在开发板的 / 目录下也建立相同的mini2440目录,把lib文件夹考过去.编译测试程序,在 examples/qws/mousecalibration 目录下运行make我修改了Makefile 文件,修改了如下一行 -L/home/tslib/lib -lts ,在原有的 -lts 之前加上了使用此库的路径,表示使用我刚刚编译过的libts库来连接.之后把程序考入开发板的目录为开发板增加环境变量export QTDIR=/mini2440exportLD_LIBRARY_PATH=$QTDIR/lib:/home/tslib/lib:$LD_LIBRARY_PATH export QWS_KEYBOARD='LIRC:/dev/lircd'export QWS_MOUSE_PROTO=tslib:/dev/event0在开发板中运行 mousecalibration 进行QT的效准,OK 触摸屏正常使用Fedora12下搭建Qt Creator的ARM开发环境并移植Qt4.6.2到Micro2440(一)参考:/jiyeqian/blog/item/f46d26a2ff3f7da6caefd0d6.html/dongliqiang2006/archive/2009/08/30/4500002.aspx环境:虚拟机Fedora12(建议安装Vmware Tools,详细安装方法参照Vmware帮助文档),USB串口,minicom终端。
Qt嵌入式开发环境搭建一、Qt版本介绍按照不同的图形界面来划分,分为四个版本:1、Win32版:适用于windows平台2、X11版:适用于各种X系统的Linux和Unix平台3、Mac版:适用于苹果的MacOS4、Embedded版:适用于具有帧缓冲(Frame buffer)的linux 平台Qtopia是基于qt开发的一个软件平台,Qtopia是构建于Qt/E 之上的一系列应用程序,在这个平台上我们可以开发各种应用程序。
2008年,TrollTech公司被Nokia收购后,Qtopia被重新命名为Qt Extended。
Nokia在推出了Qt Extended的最新版Qt Extended 4.4.3之后的2009年3月3日,决定停止Qt Extended的后续开发,转而全心投入Qt的产品开发,并逐步会将一部分Qt Extended 的功能移植到Qt的开发框架中。
所以总的来说,QT也就三种:面向桌面的x11、面向嵌入式的Qt/E、以及面向嵌入式带各种应用程序的Qtopia桌面系统二、比如是Qt的各种版本介绍1、Qt的安装程序(包含了QtCreator,QtAssistant)Windows--x86--msvc2012_64_opengl :表示window平台,msvc2012可以与VS2012进行结合使用,64位应用程序,要求电脑装的是64位操作系统;opengl表示支持openGL的绘图模式Windows--x86--mingw48_opengl :window平台下的mingw48编译器进行编译。
2、Qt的库的源码包3、Qt安装包的下载网址:如果想下载Qt的以前版本,可以在上面网址的最下面的一栏有个Archive for old versions ,进去就可以下载qt的以前版本了。
三、嵌入式Qt开发环境的搭建1.预备知识,嵌入式qt开发环境的安装方法很多,qt的版本也很多。
有点让人不知所措,不知该按哪种方法去安装。
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工程。
ubuntu8.04下编译运行qtopia4.3.2开发板:YC2440-F-V5.1文章作者:lxm650@,转载请注明出处。
1、ubuntu8.04开启root用户及设置中文界面Ubuntu安装后,root用户默认是被锁定了的,不允许登录。
对于桌面用户来说,这样安全性更高一些,是应该的。
但做为嵌入式系统开发,则不是很合适。
有时在编译程序时会遇到一些莫名其妙的问题。
因此我们需要开启root用户。
步骤:1、系统->系统管理->用户和组,选择root用户然后点击“属性”,设置root用户的密码;2、系统>系统管理>登录窗口,点“安全”选项页,选择“允许本地管理员登录”。
这样在登录时就可以root为用户名登录了。
登录后看到的是英文界面,即便你已经安装了中文语言包。
这时还需做以下设置才能出现中文界面。
gedit ~/.profile修改root下隐藏文件.profile,以下是修改过的。
此后就成为中文桌面。
# ~/.profile: executed by Bourne-compatible login shells.if [ "$BASH" ]; thenif [ -f ~/.bashrc ]; then. ~/.bashrcfifimesg n# Installed by Debian Installer:# no localization for root because zh_CN.UTF-8# cannot be properly displayed at the Linux consoleLANG="zh_CN.UTF-8"LANGUAGE="zh_CN:zh"2、安装主机GCC编译器编译qtopia时需要用到主机的GCC编译器,ubuntu默认是不带的,因此需要下载安装。
在新立得软件包管理器中搜索GCC,然后选择安装。
我安装的是GCC4.2版。
3、安装交叉编译器3.1我用的交叉编译器是arm-linux-gcc 3.4.1版。
进入arm-linux-gcc-3.4.1.tar.bz2文件所在的目录运行命令:mkdir /usr/local/arm (如果您的pc端linux系统已经有这个文件夹,这步就跳过)tar -xjvf arm-linux-gcc-3.4.1.tar.bz2 -C /然后运行命令gedit /etc/bash.bashrc在最后加上一行PATH=$PATH:/usr/local/arm/3.4.1/bin保存后关闭。
重新打开终端,如果输入命令arm-linux-gcc --version后能有版本显示则交叉编译环境已经建立了。
3.2修改编译器文件gedit /usr/local/arm/3.4.1/arm-linux/include/linux/videodev2.h在#define V4L2_PIX_FMT_HI240 v4l2_fourcc('H','I','2','4') /* 8 8-bit color */ 之后添加#define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */按同样的方法修改arm-linux/sys_include/linux/videodev2.h4、安装NFS4.1安装nfs服务器端apt-get install portmap nfs-kernel-server4.2配置共享文件编辑/etc/exports,在其中增加要共享的目录gedit /etc/exports配置/work/qtopia_arm/nfs *(rw,sync, no_root_squash)/work/qtopia_arm/nfs是要共享的目录;*代表所有的客户机都可以挂接此文件系统;rw代表客户机以读写许可来挂接它们的根文件系统;no_root_squash 选项允许客户机以主机上的root身份挂接根文件系统。
保存退出。
4.3重启服务/etc/init.d/portmap restart/etc/init.d/nfs-kernel-server restart每当修改了/etc/exports都要重启服务以便修改生效。
4、安装一些库在编译时可能会出现一些错误,提示缺少某些库,这时可以根据提示来下载安装缺少的库文件。
每个人的主机环境都不太一样,因此缺少的库可能也不一样。
6、建立工作目录创建 /work/qtopia_arm/nfs并拷贝qtopia-opensource-4.3.2源码包到/work/qtopia_arm/目录下。
7、定义两个环境变量方便编译#export QTOPIA_INSTALL=/work/qtopia_arm/nfs#export QTOPIA_RUN_ON_TARGET=/mntQTOPIA_INSTALL为主机上qtopia最终的安装目录,这里将安装路径独立出来是为了方便在目标板上进行nfs挂载调试使用。
QTOPIA_RUN_ON_TARGET为qtopia在target板文件系统中的所在路径。
如果采用NFS方式,一定要将qtopia挂载到QTOPIA_RUN_ON_TARGET指定的路径即/mnt ,因为qtopia运行的绝对路径已经被编译进可执行文件中。
8、修改部分源码8.1拷贝编译目标需要的文件# cd /work/qtopia_arm/qtopia-opensource-4.3.2/src/libraries/qtopiabase/# cp custom-linux-generic-g++.h custom-linux-arm-g++.h# cp custom-linux-generic-g++.cpp custom-linux-arm-g++.cppNote: 这两个文件包含控制液晶屏亮度函数和一些优化qotpia core 的宏定义,用户可自己设定8.2直接支持触摸屏而不使用外部库#gedit /work/qtopia_arm/qtopia-opensource-4.3.2/qtopiacore/qconfig-qpe.h在最后添加宏定义#define QT_QWS_IPAQ#define QT_QWS_IPAQ_RAW8.3 修改时区信息读取路径#gedit /work/qtopia_arm/qtopia-opensource-4.3.2/qtopiacore/qconfig-qpe.h在最后添加宏定义#define QTOPIA_ZONEINFO_PATH "/mnt/etc/zoneinfo/"QTOPIA_ZONEINFO_PATH即时区文件所在的路径,这里对它进行修改是必要的。
否则qtopia运行时候会到默认路径/usr/share/zoneinfo寻找时区文件。
注意,这里的“/mnt”即qtopia在开发板文件系统中的所在路径,要和环境变量$QTOPIA_RUN_ON_TARGET一样。
9、生成Makefile文件建立一个空文件Configure.sh,并拷贝下列内容:echo "yes" | /work/qtopia_arm/qtopia-opensource-4.3.2/configure -edition phone -xplatform linux-arm-g++ -arch arm -no-qvfb -release -displaysize 480*272 -no-modem -launch-method quicklaunch –image /work/qtopia_arm/nfs -prefix /mnt -no-bluetooth -no-drm -no-infrared -extra-qt-config "-qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg" -extra-qtopiacore-config " -depths 16 -qt-mouse-linuxtp -no-mouse-pc -no-mouse-bus -no-mouse-yopy -no-mouse-vr41xx -no-mouse-tslib -no-mouse-qvfb" 2>&1 | tee logfile注意:脚本文件要具有可执行属性才能执行,执行chmod +x Configure.sh。
注:1) 这里需要提的是qtopia交叉编译时默认是使用arm-linux-gcc编译的,从-xplatform 参数指定的路径linux-arm-g++下,我们可以找到qmake.conf文件,里面定义了交叉编译所使用的工具, QMAKE_CC默认为arm-linux-gcc。
所以,若有人使用了其他名字的交叉编译工具,需要在qmake.conf文件进行修改或将编译工具连接为arm-linux-*也可以。
10、配置并编译生成Makefile#cd /work/qtopia_arm#./configure.sh编译并安装#make#make install安装路径为$QTOPIA_INSTALL即/work/qtopia_arm/nfs11、拷贝zoneinfo默认安装时没有拷贝时区信息,需要手动拷贝#cp –rvf /work/qtopia_arm/qtopia-opensource-4.3.2/etc/zoneinfo /work/qtopia_arm/nfs/etc12、运行qtopia12.1启动好开发板后(内核+文件系统),挂载qtopia#mount -t nfs 192.168.1.101:/work/qtopia_arm/nfs /mnt -o nolock,rsize=1024,wsize=1024,timeo=15主机IP地址设置为192.168.1.101,子网掩码255.255.255.0,网关192.168.1.1开发板IP地址设置为192.168.1.168,子网掩码255.255.255.0,网关192.168.1.112.2设置环境变量导入某些环境变量,使qtopia正常工作在开发板上执行:#export PATH=/mnt/bin:$PATH#export LD_LIBRARY_PATH=/mnt/lib:$LD_LIBRARY_PATH#export QWS_MOUSE_PROTO=LinuxTP:/dev/h3600_tsraw#export QWS_DISPLAY="LinuxFb:mmWidth85:mmHeight48:0"其中“mmWidthXX:mmHeightXX”为屏幕的可视面积大小,与具体的设备尺寸有关系12.3运行qpe#qpe&等target板LCD出现画面之后,启动触摸屏校正程序#qcop service send Launcher "execute(QString)" "calibrate"校准完后会在/etc目录下生成Pointercal校准文件,每次触摸屏启动都会读取该文件内容进行触摸屏设定。