qt搭建.docx

上传人:b****5 文档编号:12388575 上传时间:2023-04-18 格式:DOCX 页数:42 大小:29.97KB
下载 相关 举报
qt搭建.docx_第1页
第1页 / 共42页
qt搭建.docx_第2页
第2页 / 共42页
qt搭建.docx_第3页
第3页 / 共42页
qt搭建.docx_第4页
第4页 / 共42页
qt搭建.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

qt搭建.docx

《qt搭建.docx》由会员分享,可在线阅读,更多相关《qt搭建.docx(42页珍藏版)》请在冰豆网上搜索。

qt搭建.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1