Qtopia2.2.0应用程序笔记.doc_第1页
Qtopia2.2.0应用程序笔记.doc_第2页
Qtopia2.2.0应用程序笔记.doc_第3页
Qtopia2.2.0应用程序笔记.doc_第4页
Qtopia2.2.0应用程序笔记.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

最近按照“天嵌Qt程序开发完全手册”编写了本人第一个Qtopia2.2.9的应用程序。这是在上次用UBUNTU10.04成功编译出Qt开发环境的基础上编写的。具体步骤如下:第一步设置变量和建立项目文件夹主要是在编写应用程序之前设置下各个工具与文件的位置等信息,方便之后的编译(1)进入到Qte根目录下(/opt/EmbedSky/Qte)(2)执行# source setX86_QpeEnv(3)在自己需要的地方建立项目文件夹,下面设计编写的文件都放在这里面,而与项目无关的文件一定不要放在里面,否则会编译出错。(我的是opt/EmbedSky/Qte/x86-qtopia-2.2.0/pro/t1)。第二步用designer设计器编写ui界面(1)执行# $QTDIR/bin/designer & (实际就是用的“qt2/bin/designer &”)。(2)新建一个项目文件,编辑后保存退出。得到xxx.h和xxx.ui(用户界面文件,XML格式)两个文件(如t1.h和t1.ui)第三步用uic和moc产生源代码uic:是将刚刚得到的XML格式的xxx.ui(t1.ui)文件转换为xxx.h(t1.h)和xxx.cpp(t1.cpp)文件。moc:用于Qt C+扩展的metra-object编译器,利用刚刚产生的xxx.h(t1.h)生成moc-xxx.cpp(moc_t1.cpp)文件。天嵌所教的方法是建立一个可执行脚本来完成文件的转换,该脚本在以后的开发中只需要修改一些文件名称即可用到别的工程中。下面是脚本的建立步骤:(1)在项目文件夹下执行# gedit ui2cpp(2)输入内容#!/bin/sh$QTDIR/bin/uic -o t1.h t1.ui$QTDIR/bin/uic -o t1.cpp -impl t1.h t1.ui$QTDIR/bin/moc t1.h -o moc_t1.cpp(3)保存退出。(4)执行# chmod +x ui2cpp(5)执行# ./ui2cpp (生成t1.h、t1.cpp、moc_t1.cpp)。注意:每次使用设计器修改并保存*.ui的工程文件后,必须使用ui2cpp重新产生源代码,否则会出现编译出错。直接修改t1.cpp程序不用使用ui2cpp,重新make就OK了!第四步添加main.cpp文件main.cpp是一个通用的源码,以后只要修改里面库和文件名即可用到其他工程中。(1)在项目文件夹下执行# gedit main.cpp(2)输入内容#include t1.h/调用刚刚得到的头文件#include #include QTOPIA_ADD_APPLICATION(t1,t1)/第一个t1是要产生的可执行文件名,第二个是主界面的名称QTOPIA_MAIN(3)保存退出。第五步产生*.pro文件使用tmake 中的progen软件产生pro文件(1)执行# progen(2)执行# progen -o (3)执行# gedit 完善pro文件。(4)将内容改为TEMPLATE= appCONFIG= qtopia warn_on releaseHEADERS= t1.hSOURCES= main.cpp t1.cppINTERFACES= t1.ui(5)保存退出,得到文件。第六步生成Makefile文件根据上步得到的pro文件,使用tmake软件可以生成初步的Makefile文件。(1)执行# tmake -o Makefile 生成Makefile(2)执行# gedit Makefile 修改Makefile(主要是删除重复的内容,增加相关代码)(3)修改后内容为(里面除了蓝色添加的代码外,还要删除重复内容)# Makefile for building t1# Generated by tmake at 09:39, 2010/11/05# Project: t1# Template: app# Compiler, tools and optionsCC=gccCXX=g+CFLAGS=-pipe -Wall -W -O2 -DNO_DEBUGCXXFLAGS=-pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUGINCPATH=-I$(QTDIR)/include -I$(QPEDIR)/includeLINK=g+LFLAGS=LIBS=$(SUBLIBS) -L$(QPEDIR)/lib -L$(QTDIR)/lib -lqpe -lqtopia -lqteMOC=$(QTDIR)/bin/mocUIC=$(QTDIR)/bin/uicTAR=tar -cfGZIP=gzip -9f# FilesHEADERS =t1.hSOURCES =main.cpp t1.cppOBJECTS =main.o t1.oINTERFACES =t1.uiUICDECLS =t1.hUICIMPLS =t1.cppSRCMOC=moc_t1.cppOBJMOC=moc_t1.oDIST=TARGET=$(QPEDIR)/image/opt/Qtopia/bin/t1DESKTOP = $(QPEDIR)/image/opt/Qtopia/apps/EmbedSky/t1.desktopICON = $(QPEDIR)/image/opt/Qtopia/pics/t1.pngINTERFACE_DECL_PATH = .# Implicit rules.SUFFIXES: .cpp .cxx .cc .C .c.cpp.o:$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $ $.cxx.o:$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $ $.cc.o:$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $ $.C.o:$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $ $.c.o:$(CC) -c $(CFLAGS) $(INCPATH) -o $ $# Build rulesall: $(TARGET)cp -f t1.desktop $(DESKTOP)cp -f t1.png $(ICON)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)moc: $(SRCMOC)tmake: MakefileMakefile: tmake -o Makefiledist:$(TAR) t1.tar $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST)$(GZIP) t1.tarclean:-rm -f $(OBJECTS) $(OBJMOC) $(DESKTOP) $(ICON) $(TARGET)-rm -f * core# Sub-libraries# Combined headers# Compilemain.o: main.cpp t1.h /opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/include/qtopia/qpeapplication.ht1.o: t1.cpp t1.h t1.uit1.h: t1.ui$(UIC) t1.ui -o $(INTERFACE_DECL_PATH)/t1.ht1.cpp: t1.ui$(UIC) t1.ui -i t1.h -o t1.cppmoc_t1.o: moc_t1.cpp t1.hmoc_t1.cpp: t1.h$(MOC) t1.h -o moc_t1.cpp(4)保存退出。第七步制作启动器创建一个桌面启动器(*.desktop)文件。(1)执行# gedit t1.desktop 制作桌面启动器文件。(2)输入内容(记得把后面的注释去掉)Desktop Entry/固定格式Version=1.0Name=t1 Test/启动器显示的名字comment=Wangzhen first Qt programExec=t1/启动器要启动的应用程序名称(应用程序必须是Qt的应用程序)Icon=t1/启动器显示的图标名称(去掉后缀名.png)Type=Application/图标的类型(3)保存退出,得到t1.desktop桌面启动器文件。第八步制作桌面图标下面制作桌面图标文件,格式是*.png(t1.png),图片大小是16x16。(1)将制作好的桌面图标文件*.png(t1.png)复制到项目文件夹下。第九步修改xxx.cpp(t1.cpp)文件这个就是在由ui设计器生成的cpp文件下,用代码进一步修改程序,如果厉害的话,完全可以自己写,这次t1的项目只是实现一个按键显示一串文字的功能,所以在此,添加按下按键时的响应情况。(1)执行# gedit t1.cpp(2)修改后的t1.cpp的内容#include t1.h#include #include #include #include #include #include t1:t1( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) if ( !name )setName( t1 ); resize( 451, 305 ); setCaption( tr( wangzhen_test1 ) ); user_b = new QPushButton( this, user_b ); user_b-setGeometry( QRect( 60, 20, 100, 30 ) ); user_b-setText( tr( User Button ) ); close = new QPushButton( this, close ); close-setGeometry( QRect( 120, 140, 80, 28 ) ); close-setText( tr( close ) ); User_t = new QLabel( this, User_t ); User_t-setGeometry( QRect( 20, 70, 388, 30 ) ); QFont User_t_font( User_t-font() ); User_t_font.setFamily( helvetica ); User_t_font.setPointSize( 18 ); User_t_font.setBold( TRUE ); User_t-setFont( User_t_font ); User_t-setText( tr( ) ); / signals and slots connections connect( user_b, SIGNAL( clicked() ), this, SLOT( user_button() ) ); connect( close, SIGNAL( clicked() ), this, SLOT( close() ) );t1:t1() / no need to delete child widgets, Qt does it all for usbool t1:event( QEvent* ev ) bool ret = QWidget:event( ev ); if ( ev-type() = QEvent:ApplicationFontChange ) QFont User_t_font( User_t-font() );User_t_font.setFamily( helvetica );User_t_font.setPointSize( 18 );User_t_font.setBold( TRUE );User_t-setFont( User_t_font ); return ret;void t1:user_button() User_t-setText(tr(Hello,This is first Qt program by WangZhen!); /qWarning( t1:user_button(): Not implemented yet! );(3)保存退出。第十步编译并仿真(1)执行# make 命令编译完成后“t1”Qt的可执行程序放在了“/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/image/opt/Qtopia/bin/”目录下。“t1.png”放在了“/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/image/opt/Qtopia/pics”目录下。“t1.desktop”放在了“/opt/EmbedSky/Qte/x86-qtopia-2.2.0/qtopia/image/opt/Qtopia/apps/EmbedSky”下。(2)执行# /opt/EmbedSky/Qte/test_x86 进行仿真测试。第十一步移植到ARM板子上面(我的是QT2440)(1)在Qte根目录下执行# source setARM_QpeEnv 设置编译ARM的环境变量。(2)将项目文件夹复制到“arm-qtopia-2.2.0/pro/”目录下,也可以和其他目录下。(3)在项目文件夹下执行# make clean 清除由于编译x86程序时用的Obj文件,否则编译出错。(4)执行# tmake -o Makefile 重新生成针对ARM平台的Makefile文件。(5)执行# gedit Makefile 修改Makefile自身的bug和增加代码。(6)修改后内容为(里面除了蓝色添加的代码外,还要删除重复内容)# Makefile for building t1# Generated by tmake at 12:57, 2010/11/05# Project: t1# Template: app# Compiler, tools and optionsCC=arm-linux-gccCXX=arm-linux-g+CFLAGS=-pipe -Wall -W -O2 -DNO_DEBUGCXXFLAGS=-pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUGINCPATH=-I$(QTDIR)/include -I$(QPEDIR)/includeLINK=arm-linux-gccLFLAGS=LIBS=$(SUBLIBS) -L$(QPEDIR)/lib -L$(QTDIR)/lib -lm -lqpe -lqtopia -lqteMOC=$(QTDIR)/bin/mocUIC=$(QTDIR)/bin/uicTAR=tar -cfGZIP=gzip -9f# FilesHEADERS =t1.hSOURCES =main.cpp t1.cppOBJECTS =main.o t1.oINTERFACES =t1.uiUICDECLS =t1.hUICIMPLS =t1.cppSRCMOC=moc_t1.cppOBJMOC=moc_t1.oDIST=TARGET=$(QPEDIR)/image/opt/Qtopia/bin/t1DESKTOP = $(QPEDIR)/image/opt/Qtopia/apps/EmbedSky/t1.desktopICON = $(QPEDIR)/image/opt/Qtopia/pics/t1.pngINTERFACE_DECL_PATH = .# Implicit rules.SUFFIXES: .cpp .cxx .cc .C .c.cpp.o:$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $ $.cxx.o:$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $ $.cc.o:$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $ $.C.o:$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $ $.c.o:$(CC) -c $(CFLAGS) $(INCPATH) -o $ $# Build rulesall: $(TARGET)cp -f

温馨提示

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

评论

0/150

提交评论