qt搭建.docx
《qt搭建.docx》由会员分享,可在线阅读,更多相关《qt搭建.docx(42页珍藏版)》请在冰豆网上搜索。
qt搭建
实验十三QT图形界面相关实验
一,实验目的
完成这个实验后,您将具有以下能力:
∙熟悉如何在linux环境下安装qt和qte环境。
∙了解如何在Qt/E环境下使用qvfb显示程序结果
∙了解如何完成Qt/E的交叉编译环境并且运行程序
二,基础知识
进行本实验前,您应具有:
∙C语言基础
∙Linux环境下vi编译器的使用
∙Makefile的编写和使用
∙Linux下的程序编译与交叉编译过程
三,实验环境准备
为了完成本实验,以下硬件条件是必需的:
∙UP-NETARM2410-S嵌入式实验平台
∙PC机Pentium500以上,硬盘40G以上,内存128M以上
为了完成本实验,以下软件条件是必需的:
∙PC机操作系统RedHatLinux9.0
∙ARM-LINUX开发环境
∙使用QtDesigner软件环境
∙需要如下几个压缩包:
qt-embedded-2.3.10-free.tar,qt-x11-2.3.2.tar,tmake-1.13.tar,arm-linux-gcc-3.4.1.tar.bz2
四,情景描述
使用C语言编程、Makefile文件完成Qt图形界面相关实验
五,实验基本原理
1,QT介绍
Qt是Trolltech公司的标志性产品,是一个跨平台的C++图形用户界面(GUI)工具包。
Qt的最大特点就是支持多平台处理,因为Qt对不同平台的专门API进行了专门的封装。
Qt特征
∙面向对象:
Qt具有模块设计和注重软件构件或元素的可重用行的特点
∙构件支持:
Qt提供信号(signal)和插槽(slot)概念,这是一种类型安全的方法,它允许回调,并支持对象之间在彼此不知道对方信息的情况下进行合作,这使得Qt非常适合于真正的构件编程
∙友好的联机帮助:
Qt提供了大量的联机参考文档,有超文本HTML方式,也有Unix帮助页man手册页和补充说明。
并且对于初学者,其中的指南将一步步介绍如何进行Qt编程
∙便利性:
由于Qt是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,Qt定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题
∙用户自定义:
使用其他的一些工具包经常会遇到这样一种情况,没有真正适合需求的组件,声称自定义的组件对用户来说就像一个黑匣子。
而在Qt中生成用户自定义的组件非常简单,而且易于修改组件的行为
∙国际化:
Qt为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言,Qt还支持双字节16bit国际字符标准
∙丰富的API函数:
Qt为专业应用提供了大量的函数,在Qt的API中含有大约250个C++类,大多数的类都是GUI专有的
∙可用户化外观:
Qt支持主题,基于Qt的应用程序能够在Windows外观、Motif外观,以及其它一些用户化外观主题之间切换
∙完整的一套组件工具:
Qt编程的基本模块称之为组件,组件是用户界面的组成部分,Qt含有用来创建专业外观的用户界面所需要的所有组件
注:
在第三个实验中,我们可以了解到QT的一些特征。
关于QT的执行过程
QT的执行过程如上图13.1所示:
Qt应用程序在初始化之后,在Qt库的支持下响应相应的处理事件并且返回。
该实现过程需要Qt最主要的三个基类:
Qt的三个基类
∙QObject
QObject类是所有能够处理signal、slot和事件的Qt对象的基类,能够创建带有父对象及其名字的对象,对象的父对象可以看作为这个对象的所有者。
∙QApplication
QApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置。
该类具体子类如图13.2所示:
∙QWidget
QWidget类是所有用户接口对象的基类,它继承了QObject类的属性。
组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在盘屏幕上。
QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。
如,QPushButton、QlistBox等都是它的子类。
具体子类如图13.3所示。
QApplication和QWidget都是QObject类的子类。
关于插槽机制
在Qt程序中,事件处理的方式采用了信号(signal)和插槽(slot)机制。
信号和插槽机制的好处是不需要调用翻译表,节省资源。
利用信号和插槽进行对象间的通信是Qt的最主要特征之一
当对象状态发生改变的时候,发出signal通知所有的slot接收signal,尽管它并不知道哪些函数定义了slot,而slot也同样不知道要接收怎样的signal。
signal和slot机制真正实现了封装的概念,signal和slot之间并不是一一对应的。
如图13.4所示。
显然,如图13.4可知:
同一个信号可以连接到多个插槽,多个信号也可以连接到同一个插槽之中。
随时可以建立一个连接,或者取消一个连接。
不过取消一个连接不是很常用,因为当一个对象被删除后,它所包含的所有的连接都会被自动取消。
2,QtDesigner介绍
Qt应用程序可以用QtDesinger来编写。
QtDesigner的功能十分强大,并且提供了大量可供编程使用的组件。
如图13.5所示:
QtDesigner的工作过程
QtDesigner可以新建工程,并且在工程文件中自动生成关于窗体文件的.cpp、.h文件和main.cpp文件。
其中.cpp文件和.h文件也可以通过uic工具生成。
之后可以通过progen命令生成main.pro,以及通过tmake工具生成makefile文件,之后make即可得到相应的qt应用程序。
QtDesigner功能框图
六,估计完成实验需要时间:
180分钟
练习1
使用QVFB运行基于x86的Qt运行环境
目标
了解安装Qt环境和Qt/Embedded环境的基本步骤。
了解如何在Qt/E环境下使用qvfb显示程序结果。
任务
详细步骤
1.新建一个目录,将这个实验所需要用到的压缩包全部复制进去。
新建一个目录,实验目录为/arm2410s/qt/1。
并且准备好三个压缩包:
qt-embedded-2.3.10-free.tar.gz
qt-x11-2.3.2.tar.gz
tmake-1.13.tar.gz
在实验目录下,进行如下命令检查。
[root@leio1]#pwd
/arm2410s/qt/1
[root@leio1]#ls
qt-embedded-2.3.10-free.tar.gzqt-x11-2.3.2.tar.gztmake-1.13.tar.gz
2.执行第一步:
分别解压三个压缩包,并且配置环境变量
1.在实验目录下,使用vi新建step1文件
2.在文件step1中,编写如下信息,即解压压缩包并配置环境变量:
[root@leio1]#catstep1
tar-xzftmake-1.13.tar.gz
tar-xzfqt-x11-2.3.2.tar.gz
tar-xzfqt-embedded-2.3.10-free.tar.gz
exportTMAKEDIR=$PWD/tmake-1.13
exportQT2DIR=$PWD/qt-2.3.2
exportQTEDIR=$PWD/qt-2.3.10
exportPATH=$TMAKEDIR/bin:
$PATH
3.完成编写之后,按住esc键之后,输入:
wq保存退出。
4.运行这个文件,之后检查
[root@leio1]#sourcestep1
[root@leio1]#echo$TMAKEDIR
/arm2410s/qt/1/tmake-1.13
[root@leio1]#echo$QT2DIR
/arm2410s/qt/1/qt-2.3.2
[root@leio1]#echo$QTEDIR
/arm2410s/qt/1/qt-2.3.10
3.执行第二步:
编译Qt2.3.2
a.在实验目录下,使用vi新建step2文件
b.在文件step2中,编写如下信息,即配置Qt2.3.2环境变量并配置编译:
[root@leio1]#catstep2
cd$QT2DIR
exportTMAKEPATH=$TMAKEDIR/lib/linux-g++
exportQTDIR=$QT2DIR
exportPATH=$QTDIR/bin:
$PATH
exportLD_LIBRARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH
./configure-no-xft
c.完成代码的编写之后,按住esc键之后,输入:
wq保存退出。
d.运行这个文件,配置内容选择yes和everything即可生成makefile文件
[root@leio1]#sourcestep2
e.执行make命令,并且将生成的/bin/uic文件复制到$QTEDIR目录下的bin目录中,如下所示:
[root@leioqt-2.3.2]#make
[root@leioqt-2.3.2]#cpbin/uic$QTEDIR/bin/覆盖原来的uic文件
注意1:
这步如果不完成,则qvfb无法正常编译。
注意2:
配置命令如下为./configure-no-xft,具体相关选项请见之后实验说明的配置编译信息的第一部分。
4.执行第三步:
编译Qvfb
a.在实验目录下,使用vi新建step3文件
b.在文件step3中,编写如下信息,即配置Qvfb环境变量并配置编译:
[root@leio1]#catstep3
exportTMAKEPATH=$TMAKEDIR/lib/linux-g++
exportQTDIR=$QT2DIR
exportPATH=$QTDIR/bin:
$PATH
exportLD_LIBRARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH
cd$QTEDIR/tools/qvfb
$TMAKEDIR/bin/tmake-oMakefileqvfb.pro
c.完成代码的编写之后,按住esc键之后,输入:
wq保存退出。
d.运行这个文件
[root@leio1]#sourcestep3
e.执行make命令,并且将生成的qvfb文件复制到$QTEDIR目录下的bin目录中,如下所示:
[root@leioqvfb]#make
[root@leioqvfb]#cpqvfb$QTEDIR/bin/覆盖原来的文件
mv:
是否覆盖‘/arm2410s/qt/1/qt-2.3.10/bin/qvfb’?
yes
注意:
qvfb模拟在开发板中运行的情况,一般来说如果在qvfb上运行没有问题的话,通过交叉编译在开发板上运行也没有问题。
5.执行第四步:
编译Qt/Embedded
a.在实验目录下,使用vi新建step4文件
b.在文件step4中,编写如下信息,即配置Qvfb环境变量并配置编译:
[root@leio1]#catstep4
cd$QTEDIR
exportTMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
exportQTDIR=$QTEDIR
exportPATH=$QTDIR/bin:
$PATH
exportLD_LIBRARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH
./configure-no-xft-qvfb-depths4,8,16,32
c.完成代码的编写之后,按住esc键之后,输入:
wq保存退出。
d.运行这个文件,配置内容选择yes和everything即可生成makefile文件
[root@leio1]#sourcestep4
e.执行make命令,如下所示:
[root@leioqt-2.3.10]#make
注意:
配置命令如下为./configure-no-xft-qvfb-depths4,8,16,32,具体相关选项请见之后实验说明的配置编译信息的第二部分。
如果顺利的话,到此为止,qvfb/Qt/embedded环境建立完成。
6.使用程序自带的demo进行测试
[root@leio1]#cd$QTEDIR/examples/launcher
[root@leiolauncher]#qvfb–width640–height480&sleep10
之后会启动qvfb虚拟器,直接输入launcher命令运行:
[root@leiolauncher]#launcher–qws
之后即可看到图13.7所示,则环境搭建成功。
图13.7
7.自己写一个测试程序运行。
a.新建一个目录evahello,并在其中编写hello.cpp程序:
[root@leio1]#cd$QTEDIR/examples
[root@leioexamples]#mkdirevahello
[root@leioexamples]#cdevahello
[root@leioevahello]#vihello.cpp
b.hello.cpp输入如下代码,并且保存退出
#include
#include
intmain(intargc,char**argv)
{
QApplicationapp(argc,argv);
QLabel*hello=newQLabel("HelloWorld!
!
",0);
app.setMainWidget(hello);
hello->show();
returnapp.exec();
}
c.检查TMAKEPATH和QTDIR环境变量是否如下所示:
[root@leioevahello]#echo$TMAKEPATH
/arm2410s/qt/1/tmake-1.13/lib/qws/linux-x86-g++
[root@leioevahello]#echo$QTDIR
/arm2410s/qt/1/qt-2.3.10
d.都没有问题之后,使用如下命令生成hello.pro工程文件
[root@leioevahello]#progen-tapp.t-ohello.pro
e.使用如下命令生成makefile文件
[root@leioevahello]#tmake-oMakefilehello.pro
f.使用make命令执行生成可执行文件hello
[root@leioevahello]#make
8.运行qvfb,执行自己写的测试程序结果
[root@leioevahello]#qvfb&sleep10
[root@leioevahello]#./hello-qws
如果程序运行成功即可看到图13.8所示:
图13.8
实验说明
1.配置编译信息
(1)Qt2.3.2的配置编译信息
[root@leioqt-2.3.2]#./configure--help
./configure:
line1:
-f:
commandnotfound
Usage:
./configure[-debug][-release][-shared][-static][-gif][-no-gif]\
[-sm][-no-sm][-thread][-no-thread][-qt-zlib][-system-zlib]\
[-qt-libpng][-system-libpng][-no-jpeg][-system-jpeg]\
[-no-][-kde][-Istring][-Lstring][-Rstring][-lstring]
Thedefaults(*)areusuallyacceptable.Hereisashortexplanationof
eachoption:
*-release...........CompileandlinkQtwithdebuggingturnedoff.
-debug.............CompileandlinkQtwithdebuggingturnedon.
*-shared............CreateanduseasharedQtlibrary(libqt.so)
-static............CreateanduseastaticQtlibrary(libqt.a)
*-no-gif............DonotcompileinGIFreadingsupport.
-gif...............CompileinGIFreadingsupport.Seesrc/kernel/qgif.h
-no-sm.............DonotsupportXSessionManagement.
*-sm................SupportXSessionManagement,linksin-lSM-lICE.
*-no-thread.........DonotcompilewithThreadingSupport
-thread............CompilewithThreadingSupport
*-qt-zlib...........UsethezlibbundledwithQt.
-system-zlib.......Useazlibfromtheoperatingsystem
http:
//www.info-zip.org/pub/infozip/zlib
*-qt-libpng.........UsethelibpngbundledwithQt.
-system-libpng.....Usealibpngfromtheoperatingsystem.
Seehttp:
//www.libpng.org/pub/png
*-no-mng............DonotcompileinMNGI/Osupport.
-system-libmng.....Uselibmngfromtheoperatingsystem.
See
*-no-jpeg...........DonotcompileinJPEGI/Osupport.
-system-jpeg.......Usejpeglibfromtheoperatingsystem.
Seehttp:
//www.ijg.org
*-no-nas-sound......DonotcompileinNASsoundsupport.
-system-nas-sound..UseNASlibaudiofromtheoperatingsystem.
See
-no-.......Disablesamodule,wheremodulecan
canbeoneof:
opengltablenetworkcanvas
-kde...............BuildstheQtDesignerwithKDE2support,sothat
KDE2widgetscanbeuseddirectlyin
theQtDesigner.$KDEDIRmustbe
settopointtoaKDE2installation.
Seehttp:
//www.kde.org
-no-g++-exceptions.DisableexceptionsonplatformsusingtheGNUC++
compilerbyusingthe-fno-exceptionsflag.
-no-xft............DisablesupportforAnti-Aliasedfontsthroughthe
Xftextensionlibrary(XFree864.0.2andnewer).
-xft...............EnablesupportforAnti-Aliasedfonts.
Xftsupportisauto-detected,butyoumayusethese
flagstoexplicitlyenable/disablesupport.
-platformtarget...Theplatformyouarebuildingon(linux-g++)
-xplatformtarget..Theplatformwhencross-compiling.
SeethePLATFORMSfileforalistofsupported
operatingsystemsandcompilers.
-Istring...........Addanexplicitincludepath.
-Lstring...........Addanexplicitlibrarypath.
-Rstring...........Addanexplicitdynamiclibraryruntimesearchpath.
-lstring...........Addanexplicitlibrary.
Qt/Embeddedonly:
-qconfiglocal.....Usesrc/tools/qconfig-local.hratherthanthe
default(qconfig.h).
-depthslist.......Comma-separatedlistofsupportedbit-per-pixel
depths,from:
v,4,8,16,24,and32.'v'isVGA16.
-accel-voodoo3.....EnableVoodoo3acceleration.
-accel-mach64......EnableMach64acceleration.
-accel-matrox......EnableMatrox