推荐-基于qt的图片查看器设计精品_第1页
推荐-基于qt的图片查看器设计精品_第2页
推荐-基于qt的图片查看器设计精品_第3页
推荐-基于qt的图片查看器设计精品_第4页
推荐-基于qt的图片查看器设计精品_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、搬岳北农林千找大学基于嵌入式Linux统的 Qt图片查看器的设计学院(系): 机械与电子工程学院专业年级:电子信息工程10级1班学生姓名:学号:指导教师:王东完成日期:20XX年7月08日目录 TOC o 1-5 h z HYPERLINK l bookmark6 o Current Document .设计目的和方法1 HYPERLINK l bookmark8 o Current Document .嵌入式Linux系统GUI设计分析21图形用户界面概述22GUI的组成23Qt/Embedded分析3 HYPERLINK l bookmark10 o Current Document 3

2、QT技术61QT的优势62QT图形用户界面73QTCreator的特点以及优势7 HYPERLINK l bookmark12 o Current Document 4图片查看器程序的移植过程81 移植 QT8QT源代码编译 8交叉编译92程序开发10主程序中创建类10制定程序框架10编辑调试程序104.3图片查看器程序设计114.2.1预期达到的界面模型114.2.1源程序124. 3设计成果21 HYPERLINK l bookmark14 o Current Document 5结论44参考文献461设计的目的和方法经常使用电脑的同学都知道,windows系统自带的图片查看器查看图片的

3、方式比较直接,包括放大缩小翻转等基本功能。为了使图片的查看方式灵活化,本项目预设计出一款功能多样的图片查看 器。拟设计的一款图片查看器基于嵌入式Linux系统、利用Qt开发,其实现的 功能在基础的图片查看器的功能如放大缩小之外另增加了图片的任意角度旋 转、斜切、位移等功能。2嵌入式Linux系统GUI设计分析嵌入式系统的图形用户界面GUI是嵌入式系统与人与计算机之间传递、交 换信息的媒介和对话接口,是计算机的重要组成部分,用户界面的发展经历了 命令语言界面、菜单界面、图形用户界面和直接操作界面等过程。图形用户界面概述所谓GUI (Graphics User Interface)就是图形用户界面

4、,是指计算机与 其使用者之间的对话接口,是计算机系统的重要组成部分。一个图形用户界面系统通常由三个基本层次组成,即显示模型、窗口模型 和用户模型。用户模型包含了显示和交互的主要特征。图3-1给出了图形用户 界面系统的结构。 桌面管理系统 TOC o 1-5 h z 用户模型一窗口模型显示模型一操作系统硬件平台一图3T图形用户界面系统的结构当前嵌入式Linux系统迫切需要轻量级的GUI,幸运的是,不少厂家和开放 源码组织已经提供了这样的 GUI,如 Qt/Embedded, Microwindows, MiniGUI 等。尽管已具备了基本的轻量级GUI系统,但由于Flash磁盘空间、内存资源 和

5、功耗的限制,嵌入式Linux系统上的GUI应用软件设计很大程序上不同于桌 面系统应用软件的开发。比如,应用程序的用户界面就需要精心定制,来方便用户在较小尺寸的屏幕上输入输出;乂如,嵌入式系统上的应用程序一般不允 许崩溃,所以必须采取安全有效的内存管理策略保证程序的可靠性。嵌入式系统的GUI简介嵌入式GUI就是在嵌入式系统中为特定的硬件设备或环境而设计的图形用 户界面系统。所以嵌入式GUI不但要有GUI的特征,在实际应用中,嵌入式系 统对它来说还有如下的基本要求:占用资源少,高性能,高可靠性,可配置下面,我们将简要介绍集中常见的嵌入式系统的GUI,并对他们的优缺点 进行比较。OpenGUIOpe

6、nGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C+图 形/窗口接口。它和MiniGUI一样,也是使用LGPL许可证。OpenGUI提供了 2 维绘图原语,消息驱动的API、BMP文件格式支持。OpenGUI功能强大、使用方 便。用户甚至可以实现Borland BGI风格的应用程序,或者是QT风格的窗口。 OpenGUI支持鼠标和键盘的事件。在Linux上基于Framebuff er 3或者SVGALib4 实现绘图。Linux下OpenGUI也支持Mesa3D。颜色模型方面,OpenGUI已经支 持8、16、32位模型。由于其基于汇编实现的内核并利用MMX指令进行了优化,Op

7、enGUI运行速 度非常快,可以用UltraFast形容,它支持32位的机器,能够在MS-DOS, QNX5和Linux下运行,主要用来在这些系统中开发图形应用程序和游戏。 OpenGUI非常稳定,但可移植性因为其内核使用汇编语言实现会受到影响。MiniGUIMiniGUI是Linux控制台上运行的,基于SVGALib和LinuxThread6库 的多窗口图形用户界面支持系统。MiniGUI采用了类Win32的API接口,实 现了简化的类Windows 98风格的图形用户界面。MiniGUI也是一个窗口系 统,他的主要组成元素是窗口,在这个基础上MiniGUI中的窗口可以基本分四 类,分别为主

8、窗口、对话框、控件和主窗口中的窗片。MiniGUI中的主窗口和 Windows应用程序的主窗口概念类似,MiniGUI中的每个主窗口对应于一个单 独的线程,通过函数调用可建立主窗口以及对应的线程。每个线程有一个消息 队列,主窗口从这一消息队列中获取消息并由窗口过程(回调函数)进行处 理。MiniGUI的目标是保持现有小巧的特点,在Linux控制台上提供一个小 的窗口系统支持,“小”是MiniGUI的特色。同时MiniGUI 乂将尽力与微软的 MSWindows API保持兼容。这么定位是希望MiniGUI可以在未来以Linux为基 础的应用平台上提供一个简单可行的GUI支持系统,让MiniGU

9、I可以应用在 Windows CE可以应用的任何场合。QT/EmbeddedQt是Trolltech公司的一个产品,是一个多平台的C+图形用户界面应用 程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功 能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。自从1996 年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程 序的基础。Qt也是流行的Linux桌面环境KDE的基础,KDE是所有主要的 Linux发行版的一个标准组件。Qt/Embedded是Trolltech公司的另一个产品,虽然走Open Source开发 路线,采用GPL授权,但商业用

10、的要付费。Qt/Embedded是Qt的嵌入式Linux 端口,是完整的自包含C+GUI和基于Linux的嵌入式平台开发工具。大范围的 Qt/Embedded API可用于多种开发项目。Qt/Embedded可以开发市场上多种类型 的产品和设备,从消费电器(移动电话、联网板和set top盒)到工业控制设 备(如医学成像设备、移动信息系统等)。这套环境提供的API和Qt/Windows 与Qt/Xll相同,但不需要使用到XII,取而代之的提供从硬件接口、绘图程序 库和完整的GUI工具。Qt/Embedded对存储内存的需求约在800kB到3MB (Intel下x86)。其另一个特点就是跨平台,

11、用Qt API开发出来的应用程 序,可以在不同的操作系统和视窗系统上执行,如图3-2所示。GUI的组成桌面:在启动时显示,也是界面中最底层,有时也指代包括窗口、文件浏 览器在内的“桌面环境”。在桌面上由于可以重叠显示窗口,因此可以实现多 任务化。一般的界面中,桌面上放有各种应用程序和数据的图标,用户可以依 此开始工作。桌面与既存的文件夹构成里面相违背,所以要以特殊位置的文件 夹的参照形式来定义内容。比如在微软公司的Windows XP系统中,各种用户的 桌面内容实际保存在系统盘(默认为C盘):Documents and Settings用户 名八桌面文件夹里。墙纸,即桌面背景。可以设置为各种图

12、片和各种附件, 成为视觉美观的重要因素之一。视窗:应用程序为使用数据而在图形用户界面中设置的基本单元。应用程 序和数据在窗口内实现一体化。在窗口中,用户可以在窗口中操作应用程序, 进行数据的管理、生成和编辑。通常在窗口四周设有菜单、图标,数据放在中央。在窗口中,根据各种数据/应用程序的内容设有标题栏,一般放在窗口的最 上方,并在其中设有最大化、最小化(隐藏窗口,并非消除数据)、最前面、缩 进(仅显示标题栏)等动作按钮,可以简单地对窗口进行操作。单一文件界面:在窗口中,一个数据在一个窗口内完成的方式。在这种情 况下,数据和显示窗口的数量是一样的。若要在其他应用程序的窗口使用数 据,将相应生成新的

13、窗口。因此窗口数量多,管理复杂。多文件界面:在一个窗口之内进行多个数据管理的方式。这种情况下,窗 口的管理简单化,但是操作变为双重管理。标签:多文件界面的数据管理方式中使用的一种界面,将数据的标题在窗 口中并排,通过选择标签标题显示必要的数据,这样使得接入数据方式变得更 为便捷。上述中,多文件界面主要是微软视窗系统采用。而在其他环境中,通常多 是单文件界面,所以无所谓单一/多文件界面的称呼问题。菜单:将系统可以执行的命令以阶层的方式显示出来的一个界面。一般置 于画面的最上方或者最下方,应用程序能使用的所有命令几乎全部都能放入。 重要程度一般是从左到右,越往后重要度越低。命定的层次根据应用程序的

14、不 同而不同,一般重视文件的操作、编辑功能,因此放在最左边,然后往右有各 种设置等操作,最右.边往往设有帮助。一般使用鼠标的第一按钮进行操作。即时菜单(乂称功能表):与应用程序准备好的层次菜单不同,在菜单栏以 外的地方,通过鼠标的第二按钮调出的菜单称为“即时菜单”。根据调出位置 的不同,菜单内容即时变化,列出所指示的对象目前可以进行的操作。图标:显示在管理数据的应用程序中的数据,或者显示应用程序本身。数 据管理程序,即在文件夹中用户数据的管理、进行特定数据管理的程序的情况 下,数据通过图标显示出来。通常情况下显示的是数据的内容或者与数据相关 联的应用程序的图案。另外,点击数据的图标,一般可以之

15、间完成启动相关应 用程序以后再显示数据本身这两个步骤的工作。应用程序的图标只能用于启动应用程序。按钮:菜单中,利用程度高的命令用图形表示出来,配置在应用程序中, 成为按钮。应用程序中的按钮,通常可以代替菜单。一些使用程度高的命令, 不必通过菜单一层层翻动才能调出,极大提高了工作效率。但是,各种用户使 用的命令频率是不一样的,因此这种配置一般都是可以由用户自定义编辑。3 QT技术Qt是诺基亚开发的一个跨平台的C+图形用户界面应用程序框架。它提供 给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向 对象的,很容易扩展,并且允许真正地组件编程。自从1996年早些时候,Qt 进入商

16、业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也 是流行的Linux桌面环境KDE的基础。基本上,Qt同X Window上的 Motif, Openwin, GTK 等图形界 面库和 Windows 平台上的 MFC, OWL, VCL, ATL是同类型的东西,但Qt具有优良的跨平台特性、面向对象、丰富的 API、大量的开发文档等优点。QT的优势面向对象:Qt的良好封装机制使得Qt的模块化程度非常高,可重用性 较好,对于用户开发来说是非常方便的。Qt提供了一种称为signals/slots 的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简 单。丰富的AP

17、I: Qt包括多达250个以上的C+类,还提供基于模板的 collections, serialization, file, I/Odevice, directory, management ,date/time类。甚至还包括正则表达式的处理功能。支持2D/3D图形渲染,支持OpenGL ,大量的开发文档,XML支持, Webkit引擎的集成,可以实现本地界面与Web内容的无缝集成但是真正使得Qt在自由软件界的众多Widgets (如Lesstif, Gtk, EZWGL, Xforms, fltk等等)中脱颖而出的还是基于Qt的重量级软件KDE。QT图形用户界面Qt的图形用户界面的基础是QW

18、idgeto Qt中所有类型的GUI组件如按钮、 标签、工具栏等都派生自QWidget,而QWidget本身则为QObject的子类。 Widget负责接收鼠标,键盘和来自窗口系统的其他事件,并描绘了自身显示在 屏幕上。每一个GUI组件都是一个widget, widget还可以作为容器,在其内包 含其他Widget oQWidget不是一个抽象类。并且可以被放置在一个已存在的用户界面中;若 是Widget没有指定父Widget,当它显示时就是一个独立的视窗、或是一个顶 层widget o QWidget显示能力包含了透明化及Double-Buffering。Qt提供一种 托管机制,当Widge

19、t于创建时指定父对象,就可把自己的生命周期交给上层对 象管理,当上层对象被释放时,自己也被释放。确保对象不再使用时都会被删 除。3 QT Creator的特点以及优势Qt Creator是跨平台的Qt IDE, Qt Creator是Qt被Nokia收购后推 出的一款新的轻量级集成开发环境(IDE)o此IDE能够跨平台运行,支持的系 统包括Linux (32位及64位)、Mac OS X以及Windowso根据官方描述,Qt Creator的设计目标是使开发人员能够利用Qt这个应用程序框架更加快速及 轻易的完成开发任务。在功能方面,Qt Creator包括项目生成向导、高级的C+代码编辑器、

20、浏览文件及类的工具、集成了 Qt Designer Qt Assistant Qt Linguist、图 形化的GDB调试前端,集成qmake构建工具等。Qt Creator主要是为了帮助新Qt用户更快速入门并运行项目,还可提高 有经验的Qt开发人员的工作效率。使用强大的C+代码编辑器可快速编写 代码,语法标识和代码完成功能输入时进行静态代码检验以及提示样式上下文 相关的帮助代码折叠括号匹配和括号选择模式高级编辑功能。使用浏览工具管理源代码,集成了领先的版本控制软件,包括Git、 Perforce和Subversion开放式文件,无须知晓确切的名称或位置搜索类和文 件跨不同位置或文件沿用符号在

21、头文件和源文件,或在声明和定义之间切换。为Qt跨平台开发人员的需求而量身定制,集成了特定于Qt的功能,如 信号与槽(Signals & Slots)图示调试器,对Qt类结构可一目了然集成了 Qt Designer可视化布局和格式构建器只需单击一下就可生成和运行Qt项 目。4图片查看器程序的移植过程尽管已经图片查看器出现很多年,但是它对很多人来说还是个新鲜事物。 图片查看器通过液晶的屏幕来显示数字相片,可以通过读卡器接口从SD卡获取 数字相片信息,并可设置循环显示方式,比普通相框更加灵活多变,也给日益 增多的数码相片提供一个新的展示空间。移植QTQT是一个跨平台的C+图形用户界面库,是专为小型设

22、备提供丰富的窗口 小部件(Widgets)支持串口部件的定制,可以为用户提供漂亮的图形界面。QT 是开源的图形界面软件,也是最流行的图形界面之一。QT源代码编译第一步:在 ftp: /ftp. trolltech/qt/source/下载 QT 源代码 qt- embedded-free-3. 3. 7. tar. gz 和 qt-xll-free-3. 3. 7. tar. gz。第二步:编译 qt-xll-free-3. 3. 7tar zxvf qt-x 11 -free-3.3.7cd qt-xl l-free-3.3.7./configure/user/bin/gmake2交叉编译编

23、译 qt-embedded-free-3.3.7tar zxvf qt-embedded-free-3.3.7 cp qt-x 11 -free-3.3.7/bin/uic qt-embedded-free-3.3.7/bincp qt-xl l-free-3.3.7/bin/moc qt-embedded-free-3.3.7/bincd qt-embedded-free-3.3.7./configure -shared -thread -embedded arm -qvfb -freetype-depths4,8,16,24,32 -qt-gif -qt-libpng -qt-libmng

24、 -qt-libjpeg -sqlite -no -qvfb/usr/bin/gmake(6)运彳亍 qt-embedded-free-3.3.7/exanipIe/hello/heHo:#cd qt-embedded-free-3.3.7/example/hello./hello-qws如果屏幕显示hello,就说明移植成功。2程序开发环境2.1主程序中创建类在主程序中建一个mainwindows类,用来显示开机界面并接受开机界面上 的点击事件。(1)主程序中建一个setting类,初始化为隐藏,用来配置设置图片格式。 当显示开机界面时点击到配置图标,该类的对象显示,显示出配置界面。(2)主

25、程序中建一个play类,初始化为隐藏。显示开机界面后,如果点击 到播放按钮,开始载入图片。(3)设置完毕。2. 2制定程序框架QT简单易用,功能强大,用它来实现该作品的功能,写在程序上省去了很 多事。它提供对大多数目前流行图片格式的支持,如BMRPNGJPEG等,并且 可以对图片进行加工。我们可以通过QT编程,实现图片的翻转,扭曲,缩 放,重叠,以及播放幻灯片的各种切换效果。用触摸屏实现输入操作,进行界 面切换。2. 3编辑调试程序程序用C+编写,在windows主机系统下用source insight软件编辑,通过 文件共享,在虚拟机linux环境下编译,具体步骤如下:(1)在windows

26、主机和linux虚拟机的共享目录下,打开source insight软 件,建一个工程,然后在工程里新建图片查看器文件,这样,类成员会自动补 齐。(2)编辑完毕,保存。(3)进入虚拟机的图片查看器工程路径,执行以下命令,进行编译。./bin/qmake-project./bin/qmake make(4)挂载开发板,调试(用NFS)o进入开发板终端,执行相关命令,观 看程序执行效果。(5)重复以上步骤,直至程序调试满意,然后把调试好的程序烧入板子的 S3c2440L芯片中脱机运行。4. 3图片查看器程序设计4. 3.1预期达到的界面模型图4-1预期成果4. 3. 2源程序items, h#if

27、ndef ITEMS.Hitdefine ITEMS_Httinclude class QGraphicsSceneMouseEvent;class Pixltem : public QGraphicsItem , public QObject public:Pixltem(QPixmap *pixmap);QRectF boundingRect() const;void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);void timerEvent(QTimerEvent *)

28、;void mousePressEvent(QGraphicsSceneMouseEvent *);void mouseReleaseEvent(QGraphicsSceneMouseEvent *);private:QPixmap pix;QTimer *timer;ttendif / ITEMS.Hitems, cppttinclude items. httinclude Pixltem: :Pixltem(QPixmap *pixmap)pix = *pixmap;itinclude ,zmainwidget. hint main(int argc, char * argv)QAppli

29、cation app(argc, argv);MainWidget w;show();return app. exec ();)mainwidget. cppttinclude ,mainwidget. h itinclude ttinclude static const double PI = 3. 14159265358979323846264338327950288419717; MainWidget: :MainWidget (QWidget *parent):QWidget(parent)(angle = 0;scale = 5;shear = 5;translate = 50;QG

30、raphicsScene *scene = new QGraphicsScene;scene-setSceneRect(-200, -200, 400, 400);QPixmap *pixmap = new QPixmap (/zimages/rotate. png,z);item = new Pixltem(pixmap);scene-addltem(item);item-setPos(0, 0);view = new QGraphicsView;view-setScene(scene);view-setMinimumSize(400, 400);ctrlFrame = new QFrame

31、; createControlIFrame(); QHBoxLayout *mainLayout = new QHBoxLayout; mainLayout-setMargin(10);mainLayout-setSpacing(20); mainLayout-addWidget(view); mainLayout-addWidget(ctrlFrame); setLayout(mainLayout);setWindowTitle (tr (,zGraphics Item Transformation7); void MainWidget:createControlIFrame () (/ R

32、otate Control1QGroupBox *rotateGroup = new QGroupBox(tr(Rotate); QSlider *rotateSlider = new QSlider;rotateSlider-setOrientation(Qt:horizontal); rotateSlider-setRange(0, 360);connect(rotateSlider, SIGNAL(valueChanged(int), this, SLOT(slotRotate( int);QHBoxLayout *11 = new QHBoxLayout;H-addWidget (ro

33、tateSlider); rotateGroup-setLayout(11); / Scale Control1 QGroupBox *scaleGroup = new QGroupBox(tr(Scale); QSlider *scaleSlider = new QSlider;scaleSlider-setOrientation(Qt:horizontal); scaleSlider-setRange(1, 10);scaleSlider-setValue(5);connect(scaleSlider, SIGNAL(valueChanged(int), this, SLOT(slotSc

34、ale(in t);QHBoxLayout *12 = new QHBoxLayout;12-addWidget(scaleSlider);scaleGroup-setLayout(12);/ Shear Control1QGroupBox *shearGroup = new QGroupBox (tr (z,Shearz,);QSlider *shearSlider = new QSlider;shearSlider-setOrientation(Qt:Horizontal);shearSlider-setRange(0, 9);shearSlider-setValue(5);connect

35、(shearSlider, SIGNAL(valueChanged(int), this, SLOT(slotShear(in t);QHBoxLayout *13 = new QHBoxLayout;13-addWidget(shearSlider);shearGroup-setLayout(13);/ Tranlate Control1QGroupBox *translateGroup = new QGroupBox(tr(Translate);QSlider *translateSlider = new QSlider;translateSlider-setOrientation(Qt:

36、horizontal);translateSlider-setRange(0, 100);translateSlider-setValue(50);connect(translateSlider, SIGNAL(valueChanged(int), this, SLOT(slotTran slate(int);QHBoxLayout *14 = new QHBoxLayout;14-addWidget(translateSlider);translateGroup-setLayout(14);QVBoxLayout *ctrlLayout = new QVBoxLayout;ctrlLayou

37、t-addWidget(rotateGroup);ctrlLayout-addWidget(scaleGroup);ctrlLayout-addWidget(shearGroup);ctrlLayout-addWidget(translateGroup);ctrlLayout-addStretch();ctrlFrame-setLayout(ctrlLayout);voidMainWidget:slotRotate(int value) ( item-rotate(value-angle); angle = value; void MainWidget:slotScale(int value) ( qreal s;if (valuescale)s = pow(l. 1, (value-scale); elses = pow(l/l. 1, (scale-value);item-scale (s,s); scale = value; void MainWi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论