摘 要: 跟着嵌入式体系的开展,在Linux 下运用Qt 开发嵌入式应用程序是嵌入式图形用户界面( GUI) 体系应用研究的要点。经过一个通讯簿程序的规划,给出了根据Qt 的嵌入式Linux 程序开发的要害技能,包含QtDesigner、信号与槽机制的运用、程序首要功用代码的完成以及程序开发的全体进程。
Linux 操作体系具有敞开的源码、高效安稳的内核、杰出的开发环境以及支撑多种硬件渠道的特色,且具有可装备性和模块化的特色; Qt 是一个面向目标的支撑多操作体系渠道的应用程序开发结构,它采用了一种独有的Signal2Slot (信号与槽) 的目标间通讯机制,以替代传统的不安全的回调技能。Qt 的自在版敞开了源代码,因而开发人员在Linux 下运用Qt 进行嵌入式体系开发对错常抱负的挑选。
从目前国内嵌入式体系( Embedded system) 的开发状况来看,在Linux 下运用Qt 来开发嵌入式GUI 程序还不是许多,且相关中文材料也较少。
究其原因,首要是因为Qt 前史较短,其比较安稳的版别是在2002 年之后才逐渐被国内工程人员运用,尽管功用强大,但中文文档匮乏,延缓了在国内的遍及。别的一个首要原因是尽管嵌入式技能跟着半导体技能的前进得到长足的开展,但较为老练的嵌入式操作体系及支撑嵌入式操作体系的渠道是在近几年才逐渐开展起来,而Qt 需求在操作体系的支撑下才可运用。文献[ 2 ]~[ 4 ]从不同的方面论述了Linux 下运用Qt 进行嵌入式开发的一般进程和特色,但没有对其要害技能及程序开发完成进程进行具体的阐明。为此,笔者经过通讯簿程序的规划,从工程文件的树立到可执行程序的生成,具体给出了其间要害技能的完成及要害代码的运用。
1 根据Qt 的嵌入式Linux 通讯簿程序规划
在嵌入式开发之前,首先要搭建好开发环境。 正确设置编译器、Qt 及Qt E 环境变量对后续程序编译进程至关重要。本规划运用的嵌入式处理器为三星公司的根据ARM 920 T 的S3C2410X芯片,最高作业频率203 MHz. 操作体系为REDHA T L INUX 910 , 内核版别214118. 串口通讯程序为MINICOM , 运用Tro11 Tech 公司发布的自在版: qt2x1122. 3. 2 ,qt2embedded22. 3. 10 , 运用arm2linux2gcc231411 编译器。
通讯簿程序首要记载联系人的名字、电话、邮件地址及地址信息,具有新建、修改、删去、查询联系人信息等功用。
1.1 生成工程文件
一般一个应用程序对应一个工程。工程文件的作用是办理当时项目中所有的文件及其联系,能够运用progen 东西来生成程序的工程文件:
progen -t app1 t -o AddressBook. pro
生成的AddressBook1pro 工程文件并不完好,还需后续增加工程所包含的头文件、源文件等信息。
1.2 运用QtDe signer 规划程序窗体
QtDesigner 是Qt 的一个可视化的程序界面规划东西,运用它来规划程序的界面十分便利,然后开发者能够专心于程序功用的完成。通讯簿主窗口包含联系人信息查询、新建、修改及删去功用部件。查询功用运用2 个TextLable , 1 个LineEdit ,1 个ComboBox 及1 个PushButton 部件,其间ComboBox 能够设置NAME , Telep hone , Email ,Address 4 种查询办法。新建联系人能够独自弹出新建窗口来完成,运用4 个TextLable 及4 个LineEdit 部件。修改和删去联系人由1 个ListView 和2 个PushBut ton 部件构成,其间ListView 包含1 个List 和4 个Column ( 包含Name , Telep hone ,Email ,Address)。
在Qt 中,事情驱动经过Signal2Slot (信号和槽) 机制完成。Signal 首要是各可视化组件发生的事情,这些事情一般由Qt 控件预界说,如按钮单击事情clicked 等。Slot 是对某个事情的处理办法,它也归于类的成员函数,其编写和一般成员函数相似。当需求处理某组件的Signal 事情并要求把界说好的Slot 作为呼应事情的办法时,只要在完成文件中运用connect 函数把Signal 和指定的Slot 衔接起来即可。当目标改动其状况时,信号被发送,目标不关心有没有其它目标接收到这信号,能够将信号和槽经过connect 函数恣意相连。信号与槽的衔接原理如图1 所示。
图1 信号与槽衔接笼统图
以下是通讯簿程序主窗口5 个按钮的Signal2Slot 的connect 代码:
connect (add ,SIGNAL (clicked () ) ,this , SLOT(addSlot) ) ) ;
connect (edit , SIGNAL (clicked () ) ,this , SLOT(editSlot) ) ) ;
connect (del , SIGNAL (clicked () ) ,this , SLOT(delSlot) ) ) ;
connect (exit , SIGNAL (clicked () ) ,this , SLOT(exitSlot) ) ) ;
connect ( search , SIGNAL (clicked ( ) ) , this , SLOT ( searchSlot) ) ) ;
窗口(如图2 及图3 所示) 规划完成后,将通讯簿主窗口及新建联系人窗口别离保存为AddressBook. ui 和New. ui 界面文件。
图2 通讯簿主窗口
图3 新建联系人窗口
1.3 生成窗体类的头文件和源文件
运用Qt 供给的uic 东西经过界面文件AddressBook.ui 来生成AddressBook. h 文件和AddressBook.cpp 文件(相同,运用uic 东西经过界面文件New.ui 来生成New.h 和New.cpp 文件) :
uic -o AddressBook. h AddressBook. ui
uic -o AddressBook. cpp -impl AddressBook. h
AddressBook. ui
通讯簿要完成新建、修改、删去、查询联系人信息等功用还需求在AddressBook1cpp 文件里增加相应的功用完成代码。
为完成新建联系人功用,在文件AddressBook1cpp 中界说一个AddressBook 类的成员函数:
void AddressBook∶∶addSlot ()