版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
天嵌广州天嵌计算机科技天嵌广州天嵌计算机科技地址 厦B座 (销售 (技术支持 传真 E-mail: 基于SKY2440/TQ2440Qt/Embeded用用程序开发完全手(上(V2.22010年06月06 地址 厦B座 (销售 (技术支持 传真 E-mail: 本手册归属广州天嵌计算机科技(以下简称“天嵌科技”)所有,并保留。非经天嵌科技同意(形式,任何单位及个人不得擅自摘录本手册部分或全部内容,违者(我们)公司将其。地址 厦B座 (销售 (技术支持 传真 E-mail: 所谓“授人以鱼不如授人以渔”,在天嵌科技的中,我们希望做到让客户熊掌与鱼兼得。天嵌科技在本时,是天嵌技一的。先我不会提供一枯燥,无深入发LnxQt应用程序的目的。 基于广州天嵌计算机科 的SKY2440或TQ2440对Qt应用程序开发的操作步骤进行为了让 Qt开发手册的上部分,手册的下部分也将很快和大家见制台来操作开发板的Linux,而没法使用LCD对开发板进行操作感到很无奈呢?本将会带您进入Linux是不是很酷?好,赶快加入我们的LinuxGUI的开发--Qt的应用程序开发吧!您如何掌握一个Qt应用程序的开发流程、应用程序如何和Linux驱动结合、应用程序如何实现开机自动运 您Qt的开发,在后面的章节中 不是Qt源码分析,而是 大家开发Qt的方法;相信本手册能给您开启Qt应用程序开发的这扇门,带领您进入Qt应用程序开发的广阔天地。但是将来您想要有大发展还需要您的不这里有个希望也是请求,当您根据本手册学会了Qt的应用程序的开发后,请您告诉您身边的朋友和同事,您是我们广州天嵌计算机科技的用户;同时也请您能够把您做出来的Qt的相关程序或解决方法写成建议的文档放到我们的“ 选择天嵌科技的ARM9学习板--TQ2440,是您的睿智。 坚持做最好最有价值的TQ2440开发板,也坚持写最适合广大客户的2440开发 本上部分六个章节,第一章讲解一些关于Qt的概念和区别;第二章讲解Qtopia-2.2.0的移植;第三章到第五章讲解StepbyStepQt应用程序的开发;第六章讲解Qt4的移植和使用。Qt应用程序的开发流程,实现如何在PCLinuxQt应用程序,实现仿真以及如何移植Qt到arm-linux系统中。我们在实例开发的章节中的第一小节,我们都会用于分析如何实现要开发的Qt程序的实现思路,然后再在后面的章节中完成实际的开发。请注意:源码分析时,我们只讲这部地址 厦B座 (销售 (技术支持 传真 E-mail: C语言的开发,至少会简单的C++语言的开发。 地址 厦B座 (销售 (技术支持 传真 E-mail: 更新暨更正内容列表Qtopia-1.7.0Qtopia-2.2.0在本手册中使用的交叉编译器统一为EABI-4.3.3的编译器了,目前我们提供的 版本的4.3.3的交 的,安装方法见本手册的相关章节或TQ2440使用手册或Linux移植手册的相关章节。 在本手册中使用的交叉编译器统一为EABI-4.3.3的编译器了,目前我们提供的 版本的4.3.3的交 的,安装方法见本手册的相关章节或TQ2440使用手册或Linux移植手册的相关章节。 。地址 厦B座 (销售 (技术支持 传真 E-mail: ....................................................................................................................................................................2前 第一章Qt的几个相关概 Qt的区 Qt的版本介 Qt4版 Qte开发软件介 第二章建立Qtopia-2.2.0的开发平 准备工 PC仿真Qtopia- 制作Qtopia的运 单独运行qt程 第三章第一个Qt应用程序的开发流 建立Qt的项目文 产生源代 产生*.pro文 生成Makefile文 制作启动 编译并仿 学习后 第四章开发网络设置程 设计思 制作界 生成源 地址 厦B座 (销售 (技术支持 传真 E-mail: 4.5添加各个响应函数的内 制作程序和配置文 测 实验后 第五章其它QT测试程序的开 设计思 测 设计思 其他操 5.2.4测 其他的介 第六章建立Qt4的开发平 Qt4和QtCreator的获 编译PC版本的 编译ARM版本的 Qt4应用程序的制 建立源 创建项 编译程 Qt4.5的仿 Qt4的文件系统的制 附录1Qtopia-2.2.0的相 的内 setX86_QpeEnv的内 test_x86的内 附录2Qt-4.5的相关..................................................................................................................................... 地址 厦B座 (销售 (技术支持 传真 E-mail: setARM_env的内容 地址 厦B座 (销售 (技术支持 传真 E-mail: QtQt开发之前,我们先来区分几个概念,这几个概念也是开发板中提供的Qt的相关源码包和目录的区别,搞明白这些概念将会有助于我们理解Qt。必须知道的一点:QtC++应用程序开发框架,因为它的APIQt的概念:Qt是泛指Qt的所有版本的图像界面库,比如Qt/X11,QtWindowsQtMac等。由于Qt最早是Linux中随KDE流行开来的,所以我们通常所说Qt都是指Linux/UnixQt/X11。后面会讲到Qt2、Qt3Qt4,2、34Qt的版本号。Qt/Embeded的概念:它是用于嵌入Linux系统Qt版本,Qt/Embeded也简QteQt/E(以下使Qte表示。Qte去掉XLib的依赖而直接工作Framebuffer上,虽然Qt的嵌入式版本,但是它不是Qt/X11的子集,它有部分机制(比如QCOP等)就不能用于Qt/X11中。QtopiaQte的类似桌面系统的应用环境,包含有PDAPhone版本。请注意是基于,Qtopia的应用程序。Qtopia最高版本是Qtopia-2.2.0,在这之后就没有再推出过免费的Qtopia了。QtopiaCore:可以认为是刚刚讲到的Qte,虽然名字中含有Qtopia,不过它的实质还是刚刚讲到的Qte的Qt4开始把QtopiaCoreQtopia的产品线中了,但实质上QtopiaCore还是基础类库,相当于Qte。下面讲 -src-2.2.0.tar.gz版本的源码内容,下面列出了3个地址 地址 厦B座 (销售 (技术支持 传真 E-mail: Qt4 如 其它的版本,可以使用 qtopia-2.2.0QtopiaPDAQt4中是没有qtopia的,我们移植Qt4时,是不会产生Qtopia的。获取源码包之后,我们打开源码包,看一下里面的文件结构中是不包含 的 结构如下 地址 厦B座 (销售 (技术支持 传真 E-mail: Qt4Qt2的区别:QteQt4Qtopia-2.2.0Qte的版本差别外,还存在是否有QPE程序的差别,QPE程序实现的功能就是提供一个类似Windows桌面的功能,在Qt4中不存在这样的程序。uicXML格式的xxx.ui文件转换为xxx.hxxx.cpp我们在PC上面开发qt程序时,主要使用它来进行仿真。地址 厦B座 (销售 (技术支持 传真 E-mail: 以首先要建立x86Qt的平台。说明:在天嵌科技配套光盘中提供有交叉编译器的压缩包,名为:“EABI- .tar.bz2”,在光盘的“Linux资源\Linux平台开发工具包\” #tarxvfj .tar.bz2-C#gedit#Pathmanipulationif[`id-u`=0]; pathmunge pathmunge pathmunge 面讲的红色部分内容,然后将不需要用的交叉编译器的前面加上“#”号 /#Pathmanipulationif[`id-u`=0]; pathmunge pathmunge pathmunge pathmunge/opt/EmbedSky/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/bin pathmunge/opt/EmbedSky/4.3.3/bin地址 厦B座 (销售 (技术支持 传真 E-mail: 在TQ2440配套光盘中提供有Qtopia-2.2.0的源码,名为:“Qte_ .tar.bz2”,在“Linux资源\Qt源 首先解压天嵌科技提供的Qte的源码包,解压命令:#tarxvfjQte_ .tar.bz2-C/,解压后的目和EmbedSky_apps.tar.bz2源码。arm-qtiopia-2.2.0-konqueror_buildarm-qtopia-2.2.0_build的基础上增konqueror.tar.bz2的编译。 利用该源码包自行生成x86版本的Makefile文件。以上几个的使用方法,在PC的Linux环境中的终端输入:#./xxx即可,xxx标识前面讲到的6个地址 厦B座 (销售 (技术支持 传真 E-mail: PCLinux的终端执行命令:#./x86-qtopia-2.2.0-kongqueror_buildQt了。系统,前提是编译Qt所需要的系统库要安装全。2:如果使Fedora10的环境,请参考天嵌科技提供的安装安装Fedora10。注意4:对于Qt编译过程中出现的错误,多数情况是因为RedHat9没有完全安装导致的(首先请确认5:x86arm的均是两个x86的为例,其中名为“x86-qtopia-2.2.0-konqueror_build”的已经包含判断是否运行“x86-qtopia-2.2.0_build”的脚步的语句,即:当qtopia-2.2.0没有编译,则先运行“x86-qtopia-2.2.0_build”编译成功后再编译web浏览器。PCLinux1:如果您使用的平台是:Redhat9.0(天嵌科技的上面提供有和安装,建议安redhat912GBredhat94.8G的空间;如果使用的是Fedora1016GBFedora107.5GBQt编译时也需要大量的空间;同时天嵌科技在目前提供的的编译中已经实现了自动判断是否出错,如果出错2:经常有客qvfb能够运行,而qpe运行时找不到这个命令。这里解释一下:qvfb面了是qt-x11编译出来的;而qpeqtopia中编译出来的,而qtopia编译时又要依qt提供qte的库,所以,当qpe命令不存在时,最大的可能是qt的编译不成功,而绝大多数情况是因为redhat9没有完全安redhat9完全安装就是把一切可能用到的库都安装进去,至于缺少什么库,如果您有这说明:为了仿真的方便,提供了仿真:test_x86,在中完成了仿真时所需要的配置。地址 厦B座 (销售 (技术支持 传真 E-mail: SKY2440/TQ2440开发板的Qt的方法,在PCLinux的终端执行命令:#./arm-qtopia-2.2.0-kongqueror_build,就开始编译ARM版本的Qtopia了。注意2:交叉编译出来的Qt只能在ARM平台运行,也就是说在PC使用qvfb没法仿真的。 《LinuxStep10和Step11:假设制作的文件系统名称是root_qtopia_2.2.0_,同时PCLinux的“/opt/EmbedSky/”: 修改文件系统的“etc/profile”文件(为了单独运行Qt程序而设置该文件加内容如下(红色部分exportsetHOME=/root地址 厦B座 (销售 (技术支持 传真 E-mail: exportsetKDEDIR=/opt/kdeexportsetif[-f/sys/devices/virtual/input/input0/uevent]; exportset exportset exportset exportset exportsetQWS_MOUSE_PROTO="TPanel:/dev/event0USB:/dev/mouse0" exportsetQWS_MOUSE_PROTO="USB:/dev/mouse0"exportsetexportsetUSER="`id-un`"exportUSERLOGNAMEPS1qtopiaqtopia/bin/hostname-F echoStartQtopia-2.2.0>exportsetHOME=/rootexportsetKDEDIR=/opt/kdeexportsetif[-f/sys/devices/virtual/input/input0/uevent]; exportset exportset exportset exportset exportsetQWS_MOUSE_PROTO="TPanel:/dev/event0USB:/dev/mouse0" exportset地址 厦B座 (销售 (技术支持 传真 E-mail: if[-f/etc/pointercal]; echoonlyusemouse> echo"10101165536" exportsetexportsetif[-f/etc/pointercal]; 上面的“if[-f/sys/devices/virtual/input/input0/uevent”这句话用于判断内核中是否编译了触摸驱动,如果添加触摸驱动则只设置USB鼠标,并且创建一个触摸校验文件告诉qtopia-2.2.0已经完成了触摸校验,绕开触摸校验这个步骤,在天嵌科技提供的linux-的内核中VGA开头的配置是没有添加对触摸上面的“1>/dev/null2>/dev/null”这半句话决定着是否在串口上面打印qtopia的启动信息,有它则不打印qtopia的启动信息,无则打印。“if[-f/etc/pointercal];then”这个地方用于判断是否需要调用触摸校正的程序,对于只想使用USB鼠标的客户,在制作文件系统时,在“etc/”下使用vi命令建立一个名为“pointercal”的空文件,用建立好文件后将其到文件系统的“bin/” od+xqtopia 您可以对文件系统下的 下面的字体进行删减,以满足自己的需要,并且地址 厦B座 (销售 (技术支持 传真 E-mail: 从“/opt/EmbedSky/Qte/arm-qtopia-2.2.0/tslib-1.4.1/install/bin/” 从“/opt/EmbedSky/Qte/arm-qtopia-2.2.0/tslib-1.4.1/install/etc/” 下,并且修改ts.conf的内容如下: mentifyouwishtousethelinuxinputlayereventinterfacemodule_rawinput mentifyou'reusingaSharpZaurusSL-5500/SL-5000d#module_rawcollie mentifyou'reusingaSharpZaurusSL-C700/C750/C760/C860#module_rawcorgi mentifyou'reusingadevicewithaUCB1200/1300/1400TSinterface#module_rawucb1x00 mentifyou'reusinganHPiPaqh3600orsimilar#module_rawh3600 mentifyou'reusingaHitachiW #module_rawmk712 mentifyou'reusinganIBMArcticII#module_rawarctic2modulepthrespmin=1moduledejitterdelta=100modulelinear从“/opt/EmbedSky/Qte/arm-qtopia-2.2.0/tslib-1.4.1/install/lib/” 您可以在文件系统的“root/”中建立名为“s/”的,然后将您的文档比如MP3歌曲什么的放到该下,就可以在开发板启动后的qtopia界面的“s”菜单栏下直接看到对应的文地址 厦B座 (销售 (技术支持 传真 E-mail: 完成了带有qtopia的文件系统,在按照前面讲解的制作Yaffs文件系统的方法,使用mkyaffsimage1:刚刚制作好的文件系统第一次使用时需要校正触摸,使用tslib校正触摸的方法是:用触摸笔LCD上面的的中心,顺序是左上-》右上-》右下-》左下-》中心,然后校正结束,校正结束后除方法:$rm-f/etc/pointercal。到这里关于Qt移植的最基本的东西讲完了,下面进入开发Qt应用程序的。实现目标能够编写开发Qt的应用程序。这里一点,天嵌科技在中能做到的是引导您学习,您法,最终的学地址 厦B座 (销售 (技术支持 传真 E-mail: 对于需要开机单独运行某个程序(假设为abc)时,可以选择修改qtopia 容替换为“abc-qws”;也可以修改“etc/init.d/rcS”文件,将“qtopia&”修改为“abc-qws1>/dev/null2>/dev/null”。单独运行某个Qt程序时“-qws”参数必须添加。下面分别列出修改qtopiarcS文件后的内容:echoStartQtopia-2.2.0>exportsetHOME=/rootexportsetKDEDIR=/opt/kdeexportsetif[-f/sys/devices/virtual/input/input0/uevent]; exportset exportset地址 厦B座 (销售 (技术支持 传真 E-mail: exportexportsetexportexportset exportsetQWS_MOUSE_PROTO="TPanel:/dev/event0USB:/dev/mouse0" exportset if[-f/etc/pointercal]; echoonlyusemouse> echo"10101165536" exportsetexportsetif[-f/etc/pointercal]; $QPEDIR/bin/abc-qws>/dev/null2>/dev/null $QPEDIR/bin/abc-qws>/dev/null2>/dev/null对于需要测试某个Qt程序时,直接在开发板的串口终端输入对应的Qt应用程序的名称(假设为abc)加上“-qws”的参数即可“$abc-qws”地址 厦B座 (销售 (技术支持 传真 E-mail: PCLinux,然后首先在终端中输入命令:#sourcesetX86_QpeEnv,完成设置变量的操作,当第一次Qt程序实现一个功能,就是按下设置的user按钮后,显示出“xxxxxxxxxx”的打印信息出来;按下close按钮后,退出该应用程序。 说明:EbeKyapp.ab2”MakefeAM86-op-22.0”解压方法:#tarxvfjEmbedSky_apps.tar.bz2C;#mvfprox86-qtopia-2.2.0;到把这些源码拷贝到PC平台的,而对于ARM平台,不需要进行以上步骤,因为在执行编译ARM平台的时已经完成了在PC的Linux的“/opt/EmbedSky/Qte/x86_qtopia/pro” 下新建一个名为“first/”的 在PC的Linux的终端输入命令:#$QTDIR/bin/designer&( 启动Qt的设计器地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 应的函数。如下图所示,完成user按钮和close按钮的 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 错的情况,原因可以分析Makefile文件得到。 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 然后修改#Makefileforbuilding#Generatedbytmakeat19:47,2009/05/13 Project:first te:app#######Compiler,toolsandCC 科技
地址 厦B座 (销售 (技术支持 传真E-mail:support@:或 -pipe-Wall-W-O2-CXXFLAGS=-pipe-DQWS-fno-exceptions-fno-rtti-Wall-W-O2-DNO_DEBUG -I$(QTDIR)/include-I$(QPEDIR)/include LFLAGS= LFLAGS= UIC= tar- #######FilesHEADERS=first.hSOURCES=first.cpp\ OBJECTS= INTERFACES= UICDECLS=first.hUICIMPLS=first.cpp INTERFACE_DECL_PATH=.#######Implicit.SUFFIXES:.cpp.cxx.cc.C TARGET=DESKTOP=ICON= #######Buildall: cp-ffirst.desktop cp-ffirst.png地址 厦B座 (销售 (技术支持 传真 E-mail: moc:tmake: -o $(GZIP) -rm-f$(OBJECTS)$(OBJMOC)$(DESKTOP)$(ICON) -rm-f*~#######Sub-######Combined#######first.o:first.o:first.cppmain.o:main.cpp first.h $(UIC)first.ui-ofirst.cpp: $(UIC)first.ui-ifirst.h-o $(MOC)first.h-o地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 时调整各个按钮和现实信息的位置等,下面列出了修改后的first.cpp的源码内容:**Formimplementationgeneratedfromreadinguifile**Created:ThuMay1412:30:11 by:TheUserInterfaceCompiler**WARNING!Allchangesmadeinthisfilewillbe#include"first.h"#include<qlabel.h>#include<qpushbutton.h>#include<qlayout.h>#include<qvariant.h>#include<qtooltip.h>#include<qwhatsthis.h>#include<qimage.h>#include<qpixmap.h> Constructsafirstwhichisachildof'parent',with name'name'andwidgetflagssetto constchar*name,WFlagsfl :QWidget(parent,name,fl{ if(!name setName("first" resize(451,305 user_b=newQPushButton(this,"user_b" user_b->setGeometry(QRect(60,20,100,30) user_b->setText(tr("UserButton") user_t=newQLabel(this,"user_t" user_t->setGeometry(QRect(20,70,188,30) QFont user_t->setText(tr("")
bel1=newQLabel(this,"Pixma bel1");bel1->setGeometry(QRect(260,20,28,98)); close=newQPushButton(this,"close" close->setGeometry(QRect(120,140,80,28) 地址 厦B座 (销售 (技术支持 传真 E-mail: //signalsandslots connect(user_b,SIGNAL(clicked()),this,SLOT(user_button()) connect(close,SIGNAL(clicked()),this,SLOT(close())} Destroystheobjectand sanyallocated*/{ //noneedtodeletechildwidgets,Qtdoesitallfor} Maineventhandler.Reimplementedtohandle fontboolfirst::event(QEvent*ev{ boolret=QWidget::event(ev if(ev->type()==QEvent::ApplicationFontChange) QFont return}void{ o,QtApplication!") }在上面的user_button()函数中添加了对按下user_button按钮响应的功能处理,即按下按钮后,打印出 o,QtApplications!”这句话到主界面中。完成前面的步骤后,在PCLinux的终端输入:#make命令,即可完成编译,编译之后的“first”应用程序放在了“/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/image/opt/Qtopia/bin/”下面,“first.png”图标放到“/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/image/opt/Qtopia/pics/”下面,“first.desktop”图标放到“/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/image/opt/Qtopia/apps/EmbedSky/”下面地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 还需要进行3.10章节这个步骤。首先前面制作好的“first/”到“/opt/EmbedSky/Qte/arm-qtopia-2.2.0/pro/”下,然后重新打开一PC的Linux的终端,重新设置环境变量tmake软件产生Makefile文件,修改Makefile文注意1:由于 几个章节中已经编译过了first/ 到arm-qtopia-2.2.0/pro/目录之前,请先使用#makeclean命令,清除已经编译生成的obj文件,然后再 ,否则可能出现编译错误, 2:这里使用的tmake工具因为重新设置了环境变量,针对arm地址 厦B座 (销售 (技术支持 传真 E-mail: #Makefileforbuilding#Generatedbytmakeat12:09,2009/05/25 Project:first te:app#######Compiler,toolsandCC= -pipe-Wall-W-O2-CXXFLAGS=-pipe-DQWS-fno-exceptions-fno-rtti-Wall-W-O2-DNO_DEBUG -I$(QTDIR)/include-I$(QPEDIR)/include LFLAGS= $(SUBLIBS)-L$(QPEDIR)/lib-L$(QTDIR)/lib-lm-lqpe-lqtopia-lqte UIC tar- #######地址 厦B座 (销售 (技术支持 传真 E-mail: HEADERS=first.hSOURCES=first.cpp\ OBJECTS= INTERFACES= UICDECLS=first.hUICIMPLS=first.cpp DESKTOP=$(QPEDIR)/image/opt/Qtopia/apps/EmbedSky/first.desktopICON= INTERFACE_DECL_PATH=.#######Implicit.SUFFIXES:.cpp.cxx.cc.C #######Buildall: cp-ffirst.desktop cp-ffirst.png 地址 厦B座 (销售 (技术支持 传真 E-mail: moc:tmake: -o $(GZIP) -rm-f$(OBJECTS)$(OBJMOC)$(DESKTOP)$(ICON) -rm-f*~#######Sub-######Combined#######first.o:first.o:first.cppfirst.hfirst.h\main.o:main.cpp first.h $(UIC)first.ui-ofirst.cpp: $(UIC)first.ui-ifirst.h-o $(MOC)first.h-o地址 厦B座 (销售 (技术支持 传真 E-mail: 然后输入“make”命令,即可完成编译,编译结束后,应用程序“first”在“/opt/EmbedSky/Qte/arm-qtopia-2.2.0/qtopia/image/opt/Qtopia/bin/” 下,桌面图标“first.png”在“/opt/EmbedSky/Qte/arm-qtopia- 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 不方便,所以,这里天嵌科技重新制作一个基于Qt的网络设置程序。的实现方法上,本章节将会实现在Qt中实现读写外部文件,调用系统工具进行操作等。线网wifi而言,使iwconfig设置所要登录的无线网络名称和登录,使用ifconfigrouteIP等参数;对于CDMAGPRS等使用wvdial命令进行拨号。而在Qt界面中呢?可以用点击按钮来执行ifconfig等命令。但是要使用的参数呢?可以通过调用保存这 地址 厦B座 (销售 (技术支持 传真 E-mail: 再放置一个close按钮,效果如下图所示:地址 厦B座 (销售 (技术支持 传真 E-mail: Configure栏目先ButtonGroup工具,因为马上要用到乒乓开关(RadioButton),必须将其放ButtonGroup中才能实现乒乓开关功能,然后再放置数个RadioButtonClose按钮,效果如下图所示:然后设Wifi栏目、IP栏目DNS/MAC栏目NetWork栏目相同,下面分别是它们三个栏目地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 地址 厦B座 (销售 (技术支持 传真 E-mail: 先first实验中的ui2cpp到netset 下,然后修改ui2cpp,修改后的ui2cpp内容如下:(红 first实验中的main.cpp文件到 下,然后修改main.cpp,修改后的main.cpp内容如下 1#include 2#include 3#include4第二行:这里用到的头文件在“/opt/EmbedSky/Qte/arm-qtopia-2.2.0/qt2/src/kernel/”下的,这个头文件对应的帮助文件在“/opt/EmbedSky/Qte/arm-qtopia-2.2.0/qt2/doc/html/”下的同名文件(后缀名第三行:这里包含的头文件在“/opt/EmbedSky/Qte/arm-qtopia-2.2.0/qtopia/src/libraries/qtopia/”下,这个头文件对应的帮助文件在“/opt/EmbedSky/Qte/arm-qtopia-2.2.0/qtopia/doc/html/”下的同名文件(后文件中,它实现:产生主窗口,而其中的NAME是应用程序的执行名字,IMPLEMENTATION是应用程序的窗口类。在本实例中提供的窗口类名称为:netsetup,而执行名字我定义为netset,请注意区别。 地址 厦B座 (销售 (技术支持 传真 E-mail: 用exit()或quit())所有的这些操作由QPEApplication处理,应用程序窗口如果要关闭,应该调用close()pEbeSkyQer-qp-2..0qopdoch”目录下的pappcan.hl文件同时还请参考“oEbekyQer-qoa-2.2.0qopacrreqopa”qeappan.cpp 1 2**Formimplementationgeneratedfromreadinguifile34**Created:TueMay1919:29:14 by:TheUserInterfaceCompiler 8#include<qbuttongroup.h>#include<qgroupbox.h>#include<qlabel.h>#include<qlineedit.h>#include<qpushbutton.h>#include<qradiobutton.h>#include<qtabwidget.h>#include<qlayout.h>#include<qvariant.h>#include<qtooltip.h>#include<qwhatsthis.h>#include<qimage.h>#include<qpixmap.h>#include"stdio.h"#include"stdlib.h"#include"string.h"#include"sys/ioctl.h"#include"sys/stat.h"#include<fcntl.h>#include<qdir.h>#include<qtextstream.h>Constructsanetsetupwhichisachildof'parent',withname'name'andwidgetflagssetto constchar*name,WFlagsfl :QWidget(parent,name,fl{ if(!name 地址 厦B座 (销售 (技术支持 传真 E-mail: resize(382,258 setCaption(tr("EmbedSkyNetwork")); tab=newQTabWidget(this,"tab" tab->setGeometry(QRect(0,0,320,200) netinfo=newQWidget(tab,"netinfo");logo1=newQLabel(netinfo,"logo1"logo1->setGeometry(QRect(280,30,28,98)Network_info=newQGroupBox(netinfo,"Network_info"Network_info->setGeometry(QRect(6,0,256,160)Network_info->setTitle(tr("NetworkInfo"));NetMask_T=newQLabel(Network_info,"NetMask_T"NetMask_T->setGeometry(QRect(12,48,58,20)DNS_T=newQLabel(Network_info,"DNS_T"DNS_T->setGeometry(QRect(12,100,58,20)MAC_T=newQLabel(Network_info,"MAC_T"MAC_T->setGeometry(QRect(12,126,58,20)Gateway_T=newQLabel(Network_info,"Gateway_T"Gateway_T->setGeometry(QRect(12,74,58,20)ip_info=newQLineEdit(Network_info,"ip_info"ip_info->setGeometry(QRect(78,22,166,20)mask_info=newQLineEdit(Network_info,"mask_info"mask_info->setGeometry(QRect(78,48,166,20)gateway_info->setGeometry(QRect(78,74,166,20)dns_info=newQLineEdit(Network_info,"dns_info"dns_info->setGeometry(QRect(78,100,166,20) mac_info=newQLineEdit(Network_info,"mac_info" mac_info->setGeometry(QRect(78,126,166,20)地址 厦B座 (销售 (技术支持 传真 E-mail: close1=newclose1=newQPushButton(netinfo,"close1");close1->setGeometry(QRect(261,150,48, tab->insertTab(netinfo,tr("Network")); configure=newQWidget(tab,"configure"); close2=newQPushButton(configure,"close2" close2->setGeometry(QRect(262,150,48,18)); close2->setText(tr("Close")); configure_group->setGeometry(QRect(10,10,280,130)configure_group->setTitle(tr("Configure"));autoip=newQRadioButton(configure_group,"autoip"autoip->setGeometry(QRect(21,21,210,19)autoip->setText(tr("ConfigureIPautomatically(DHCP)"));wificonfig->setGeometry(QRect(21,71,210,19)cdmaconfig->setGeometry(QRect(21,96,210,19)cdmaconfig->setText(tr("ConfigureCDMA/GPRS"));logo2=newQLabel(configure_group,"logo2"logo2->setGeometry(QRect(240,20,28,98)userip=newQRadioButton(configure_group,"userip"userip->setGeometry(QRect(21,46,210,19)tab->insertTab(configure,tr("Configure")); wifi=newQWidget(tab,"wifi");logo3=newQLabel(wifi,"logo3"logo3->setGeometry(QRect(270,10,28,98)set_1=newQPushButton(wifi,"set_1"set_1->setGeometry(QRect(260,115,48,18) close3=newQPushButton(wifi,"close3" close3->setGeometry(QRect(260,145,48,18)); close3->setText(tr("Close")); wifi_set=newQGroupBox(wifi,"wifi_set" wifi_set->setGeometry(QRect(10,10,238,145)); wifi_set->setTitle(tr("WirelessSet")); 地址 厦B座 (销售 (技术支持 传真 E-mail: NetName_T->setGeometry(QRect(10,20,59,23) netname=netname=newQLineEdit(wifi_set,"netname");netname->setGeometry(QRect(80,20,150,23)170password=newQLineEdit(wifi_set,"password");171password->setGeometry(QRect(80,50,150,23));172tab->insertTab(wifi,tr("Wifi")); tcpip=newQWidget(tab,"tcpip");logo4=newQLabel(tcpip,"logo4"logo4->setGeometry(QRect(270,10,28,98)logo4->setScaledContents(TRUE);set_2=newQPushButton(tcpip,"set_2"set_2->setGeometry(QRect(260,115,48,18)set_2->setText(tr("Set"));close4=newQPushButton(tcpip,"close4"close4->setGeometry(QRect(260,145,48,18)close4->setText(tr("Close"));setIP_info=newQGroupBox(tcpip,"setIP_info"setIP_info->setGeometry(QRect(10,10,239,146)setIP_info->setTitle(tr("SetIP"));ipaddr=newQLabel(setIP_info,"ipaddr"ipaddr->setGeometry(QRect(10,20,58,20)ipaddr->setText(tr("IPAddr:")); netmask=newQLabel(setIP_info,"netmask" netmask->setGeometry(QRect(10,48,58,20) netmask->setText(tr("NetMask:"));201gateway_t=newQLabel(setIP_info,"gateway_t");202gateway_t->setGeometry(QRect(10,74,58,20));203gateway_t->setText(tr("Gateway:")); ip=newQLineEdit(setIP_info,"ip" ip->setGeometry(QRect(78,20,156,20) mask=newQLineEdit(setIP_info,"mask"); mask->setGeometry(QRect(78,48,156,20));211gateway=newQLineEdit(setIP_info,"gateway");212gateway->setGeometry(QRect(78,74,156,20));213tab->insertTab(tcpip,tr("IP")); dns_mac=newQWidget(tab,"dns_mac");地址 厦B座 (销售 (技术支持 传真 E-mail: logo5->setGeometry(QRect(270,10,28,98)logo5=newQLabel(dns_mac,"logo5" set_3=newQPushButton(dns_mac,"set_3" set_3->setGeometry(QRect(260,115,48,18) close5=newQPushButton(dns_mac,"close5" close5->setGeometry(QRect(260,145,48,18) dns_mac_set=newQGroupBox(dns_mac,"dns_mac_set" dns_mac_set->setGeometry(QRect(10,10,240,141) dns_t=newQLabel(dns_mac_set,"dns_t");dns_t->setGeometry(QRect(10,20,58,20));dns=newQLineEdit(dns_mac_set,"dns");dns->setGeometry(QRect(78,20,156,20));mac_t=newQLabel(dns_mac_set,"mac_t");mac_t->setGeometry(QRect(10,48,58,20));mac_t->setText(tr("MAC:"));mac=newQLineEdit(dns_mac_set,"mac");mac->setGeometry(QRect(78,48,156,20));tab->insertTab(dns_mac,tr("DNS/MAC"));//signalsandslotsconnect(close1,SIGNAL(clicked()),this,SLOT(close()));connect(autoip,SIGNAL(clicked()),this,SLOT(autosetip()));connect(userip,SIGNAL(clicked()),this,SLOT(usersetip()));connect(wificonfig,SIGNAL(clicked()),this,SLOT(usewifi()));connect(cdmaconfig,SIGNAL(clicked()),this,SLOT(usecdma()));connect(close2,SIGNAL(clicked()),this,SLOT(close()));connect(close3,SIGNAL(clicked()),this,SLOT(close()));connect(close4,SIGNAL(clicked()),this,SLOT(close()));connect(close5,SIGNAL(clicked()),this,SLOT(close()));connect(set_3,SIGNAL(clicked()),this,SLOT(setipinfo()));connect(set_2,SIGNAL(clicked()),this,SLOT(setipinfo()));connect(set_1,SIGNAL(clicked()),this,SLOT(setwifi())); //tab setTabOrder(gateway_info,dns_info setTabOrder(dns_info,mac_info setTabOrder(mac_info,close1 setTabOrder(close1,autoip setTabOrder(autoip,userip 地址 厦B座 (销售 (技术支持 传真 E-mail: tab->setTabEnabled(tcpip,0); tab->setTabEnabled(dns_mac,0); tab->setTabEnabled(wifi,0); 294}296 Destroystheobjectand sanyallocated{ //noneedtodeletechildwidgets,Qtdoesitallforus302}QString{ for(inti=0;i<n;i++ if(!(pstr+ ) qDebug("l[%d]:%s",i,(pstr+i)->latin1()); intpos=(pstr+i)->find('='); unsignedintlen=(pstr+i)->length(); ls[i]=(pstr+i)->left((unsignedint)pos); rs[i]=(pstr+i)->right(len-(unsignedint)pos-1); qDebug("ls[%d]:%s",i,ls[i].latin1() qDebug("rs[%d]:%s",i,rs[i].latin1()); if(ls[i]=="IPADDR"){ ip_info->setText(rs[i].latin1()); }elseif(ls[i]=="NETMASK")sefeonfg.eask=rsan);325 s>x(rsan) gateway_info->setText(rs[i].latin1()); 地址 厦B座 (销售 (技术支持 传真 E-mail: }}elseif(ls[i]=="MAC")mac_inf}elseif(ls[i]=="NETNAME" }elseif(ls[i]=="PASSWORD") if(!(pstr+ ) qDebug("l[%d]:%s",0,(pstr+0)->latin1() intpos=(pstr+0)->find('' unsignedintlen=(pstr+0)- ls[0]=(pstr+0)->left((unsignedint)pos rs[0]=(pstr+0)->right(len-(unsignedint)pos-1 if(ls[0]=="nameserver") }else}elseconstchar**lineusealittle,easilyappears void{intret=wificf.open(IO_ReadOnly);if(ret){qDebug("Readyread:open/etc/wifi.confsuccess!");QTextStreamstream(&wificf);//constchar**line=newconstchar*[12];intn=0;QStringwhile(!stream.atEnd(){ qDebug("Readyread:open/etc/wifi.conffailure!" ret=ncf.open(IO_ReadOnly地址 厦B座 (销售 (技术支持 传真 E-mail: if(ret)qDebug("Readyread:open/etc/net.conftosuccess"//constchar**line=newconstchar*intn=QStringwhile(!stream.atEnd(){str[n]= 399setNetConfigItem(str,n);400ncf.close(); }else402qDebug("Readyread:open/etc/net.conffailure!");403ncf.close(); ret=dnscf.open(IO_ReadOnlyif(ret)//constchar**line=newconstchar*intn=QStringwhile(!stream.atEnd(){str[n]= }else 425427 ThemembersofitselfNetConfighaspointedtoQString
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 孕妇心肺复苏
- 生物(四川)(全解全析)-2026年高考考前预测卷
- 水风光一体化设备集成集成应用优化方案
- 工程效率提升路径审批流程文档
- 医疗纠纷投诉处理流程
- 新型冠状病毒核酸检测流程
- 便民服务项目管理办法细则
- 跨区域团队资源同步机制规范
- 检测车间数据完整性审核制度
- 标准作业程序书编制制度规范
- 2026年1级乐理考试试题及答案
- 2020年HJ1237全国统考培训试题及官方发布答案
- 2025年上海市公安机关辅警招聘(面试)复习题及答案
- 2026年云南省玉溪市学业水平模拟考试九年级物理试题卷
- 2026年化验考核练习试题附答案详解【突破训练】
- 儿童自闭症康复机构运营方案
- 2025年新疆克拉玛依市初中学业水平模拟测试道德与法治、历史试卷卷-初中道德与法治
- 2026年中考英语仿真模拟试卷 3套(含答案解析)
- 泉城书房建设实施方案
- 《不可移动文物认定导则(试行)》
- 2026年老年专科护士考试题库及答案
评论
0/150
提交评论