讲稿(嵌入式设计与实现)

上传人:1666****666 文档编号:37781902 上传时间:2021-11-04 格式:DOC 页数:26 大小:848.13KB
收藏 版权申诉 举报 下载
讲稿(嵌入式设计与实现)_第1页
第1页 / 共26页
讲稿(嵌入式设计与实现)_第2页
第2页 / 共26页
讲稿(嵌入式设计与实现)_第3页
第3页 / 共26页
资源描述:

《讲稿(嵌入式设计与实现)》由会员分享,可在线阅读,更多相关《讲稿(嵌入式设计与实现)(26页珍藏版)》请在装配图网上搜索。

1、目 录第1章 嵌入式硬件开发环境21.1 嵌入式系统的概念21.2 熟悉OURSPXA270RP实验箱的硬件环境2第2章 Linux常用命令2第3章 搭建嵌入式Linux开发环境43.1 vwaretools的安装与共享设置43.2 tslib-1.4的编译安装43.3 qtX11和qtE4的编译安装53.4 PATH与LD_LIBRARY_PATH的设置63.5 配置交叉编译器63.6 配置minicom、tftp和NFS7第4章bootloader、Linux内核及文件系统制作与移植124.1 bootloader124.2 Linux内核编译与移植124.3文件系统制作与移植13第5章

2、Qt图形编程145.1 嵌入式GUI简介145.2 Qt/Embedded开发入门145.2.1 Qt/Embedded介绍145.2.2 Qt/Embedded图形界面155.2.3 Qt/Embedded信号和槽机制175.2.4 Qt/Embedded网络编程18第6章 聊天系统设计与实现186.1 聊天软件需求分析186.2 界面设计186.3 网络相关部分的实现186.4 项目运行24第7章 系统移植与调试24第1章 嵌入式硬件开发环境1.1 嵌入式系统的概念以应用为中心,以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。开发机称

3、为宿主机,应用机称为目标机。1.2 熟悉OURSPXA270RP实验箱的硬件环境1、认识核心板和扩展板2、认识nor flash、nand flash、sdram、ARM处理器3、熟悉电源接口、并口、JTAG接口、串口、网口、USB接口4、熟练掌握将PC机与开发实验箱的连接第2章 Linux常用命令Shell与用户间的关系如图 2.1 所示。用户在提示符下输入的命令都由Shell 先解释然后传给 Linux 内核。图 2.1 内核、Shell 和用户的关系小知识:命令的使用可以通过man 命令名或命令名 -help的方式获得帮助。1、ls: 列出目录的内容,常用参数有-l(长文件名显示格式)和

4、-a(显示所有文件), 显示格式为:文件类型与权限 链接数文件属主文件属组文件大小修改的时间名字2、find: 在指定目录中搜索文件,常用参数为-name,如find /usr/qpe/pic/ -name *.png3、cd: 改变工作目录。可使用“cd ”回到前次工作目录。“./”代表当前目录,“./”代表上级目录。4、mkdir: 创建一个目录,可以一次建立多个目录,常用参数有-p(自动创建指定路径中不存在的目录),如mkdir /home/lny/myfile5、rm: 删除一个目录中的一个或多个文件或目录,常用参数-f(删除已存在的目标文件而不提示),-i(在覆盖目标文件前要求用户确

5、认),-r(递归地删除该目录及其子目录下的所有内容)6、cp: 将给出的文件或目录复制到另一文件或目录中,常用参数有-a(保留链接、文件属性、并复制其子目录),-f(同rm),-i(同rm)7、mv: 为文件或目录改名或将文件由一个目录移入另一个目录中,常用参数-f(同rm),-i(同rm)8、ln: 为某一个文件在另外一个位置建立一个符号链接,常用参数-s(建立符号链接),如在当前目录下创建/usr/qpe/lib/fonts的软链接可以用命令ln -s /usr/qpe/lib/fonts/ ./fonts9、fdisk: 可以查看硬盘分区情况,并可对硬盘进行分区管理,如fdisk -l1

6、0、mount:磁盘挂载命令。如挂载根目录mount o soft,timeo=100,rsize=1024 192.168.0.100:/ /mnt;挂载U盘mount t vfat /dev/sdb1 /mnt/usb挂载windows目录为mount -o username=administrator,password=pldy123,iocharset=utf8 /172.21.28.71/c /mnt/c若想设置在开机时自动挂载,可在文件“/etc/fstab”中加入相应的设置行即可。11、echo: 显示字符串12、export: 设置新的环境变量,如export QTDIR=/u

7、sr/local/Trolltech/Qt-4.4.3export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH13、chmod: 改变文件的访问权限. 文件的访问权限可表示成:- rwx rwx rwx。在此设有三种不同的访问权限:读(r)、写(w)和运行(x);三个不同的用户级别:文件拥有者(u)、所属的用户组(g)和系统里的其他用户(o)。可增加一个用户级别 a(all)来表示所有这三个不同的用户级别。对于第一种符号连接方式的 chmod 命令中,用加号“+”代表增加权限,用减号“”删除权限,等于号“=”设置权限,如chmod a+rx,u+w

8、/home/lny/myfile对于第二种八进制数指定的方式,将文件权限字符代表的有效位设为“1”,即“rw-”、“rw-”和“r-”的八进制表示为“110”、“110”、“100”,把这个 2 进制串转换成对应的 8 进制数就是 6、6、4,也就是说该文件的权限为 664(三位八进制数),如chmod 765 /home/lny/myfile14、tar: 对文件目录进行打包或解包,常用参数有-c(建立新的打包文件),-f(对普通文件操作),-x(从打包文件中解出文件),-v(处理过程中输出相关信息),-z(调用gzip来压缩打包文件,与-x联用时调用gzip完成解压缩),-j(调用bzip

9、2来压缩打包文件,与-x联用时调用bzip2完成解压缩)。如tar -zcvf lny.tar.gz /home/lny; tar -jxvf linux-2.6.11.tar.bz2第3章 搭建嵌入式Linux开发环境3.1 vwaretools的安装与共享设置1、安装VMware tools,以方便鼠标内外移动(确保“虚拟化”不选),步骤如下:VM菜单VMware tools install“是”将光驱(linux中的光驱)的VMware tools 中的Vmwaretools-6.0.2-59824.tar.gz复制到目录root下在终端对Vmwaretools-6.0.2-59824.

10、tar.gz进行解压tar zxvf Vmwaretools-6.0.2-59824.tar.gzcd vmware-tools-distrib./vmware-install.pl(全部选yes,注意有一个默认为no的选项改为yes)2、设置windows与linux相互共享:Windows下访问linux的内容:确保网线正确连接;确保网络端口激活(系统管理网络设置静态IP并激活);确保samba服务安装并启动(系统管理服务器设置services中勾选smb选项);添加samba用户(必须是存在的用户,如果冲突,则注释/etc/samba/smbusers中对应的用户名)(“首选项”samb

11、a用户添加用户);添加共享(选择共享目录和设置共享对象权限等)。通过192.168.11.7即“虚拟机ip”的形式访问。3、Linux下访问windows的内容:确保安装时没有选择“虚拟化”选项;菜单VMsettingsoptionsshared foldsadd。在linux系统下通过/mnt/hgfs目录访问windows中共享文件夹。3.2 tslib-1.4的编译安装假设源码解压目录为: /home/tslib-1.41、cd /home/tslib-1.4 ./autogen.sh /生成congigure2、./configure -host=arm-linux -cache-fi

12、le=arm-linux.cache/加上参数-prefix=/home/tslib-1.4可以看到头文件3、make出现错误:undefined reference rpl_malloc解决:将config.h.in中的 #undef malloc 行注释掉重新执行make,OK!4、make install生成的库文件分别在目录./src、./plugins的.lib目录中,其中./lib为隐藏目录,src/.lib中包含libts-0.0.so.0.1.1,libts-0.0.so.0、libts.la、libts.lai、libts.so,plugins/.lib中包含ucb1x00.

13、so、pthres.so、linear.so、input.so、variance.so、dejitter.so等,库文件版本为libts-0.0.so.0.1.15、拷贝mkdir tslib-1.4cd tslib-1.4mkdir lib etc plugins include tests目录lib:将src/.lib/中的libts-0.0.so.0,libts-0.0.so.0.1.1,libts.so拷到其中。目录etc: 将etc/中的ts.conf拷到其中。/结合自己的触摸屏型号进行相应的修改目录plugins: 将plugins/.libs/中的*.so拷到其中。/结合自己的触

14、摸屏型号,删除部分库文件目录tests: 将tests/中的ts_*拷到其中。/只需要保留ts_calibrate和ts_test目录include:将src/tslib.h拷到其中。6、测试执行测试程序ts_calibrate时一直出现错误:ts_open:no such device通过查找ts_calibrate.c发现,编译时如果没有加参数-enable-inputapi=no,则应将环境变量定义如下:export TSLIB_TSDEVICE=/dev/input/event0(出错时为TSLIB_TSDEVICE=/dev/touchscreen/ucb1x00,因为我的触摸屏型号

15、为 ucb1x00)export TSLIBDIR=/home/tslib-1.4export TSLIB_CONFFILE=$TSLIBDIR/etc/ts.confexport TSLIB_PLUGINDIR=$TSLIBDIR/pluginsexport TSLIB_FBDEVICE=/dev/fb0export TSLIB_CONSOLEDEVICE=noneexport POINTERCAL_FILE=/etc/pointercal /生成校准文件export LD_LIBRARY_PATH=$TSLIBDIR/libexport QWS_MOUSE_PROTO=TPanel:/de

16、v/touchscreen/ucb1x00export TSLIB_CALIBFILE=/etc/pointercal /应用校准文件 -f /etc/pointercal | /home/tslib-1.4/tests/ts_calibrate /检查是否存在校准文件另外,还要注意的是,ts.conf内容如下:module_raw input#module_raw ucb1x00 /如果注释前一句而保留该句,则会出现意想不到的问题。module pthres pmin=1module variance delta=30module dejitter delta=100module linea

17、r执行ts_calibrate顺利通过。3.3 qtX11和qtE4的编译安装一、QT-X11环境的配置1、解压qt-x11-4.4.3.tar.gz2、cd 解压了的目录 QT-X113、 #./configure /生成Makefile #make /要好几个小时(约3个半小时) #make install /安装完后会生成目录/usr/local/Trolltech/QT-4.4.3 ,这时刚才解压完得到的QT-X11可以不要了。 4、设置环境变量(实际上是设置编译环境):在/etc/profile 加入: #for QT-X11-4.4.3export QTDIR=/usr/local

18、/Trolltech/Qt-4.4.3export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATHexport PATH=$QTDIR/bin:$PATHexport QMAKESPEC=$QTDIR/mkspecs/linux-g+5、#source /etc/profile 使环境变量生效,确保要用的编译器摆在首位,以屏蔽系统自带的编译器。二、QT-embed环境的配置1、把arm-linux-gcc版本:3.3.2 放目录/usr/local/arm并在环境变量PATH中指明#export PATH=/usr/local/arm/3.3.2/bin

19、:$PATH 2、解压qt-embedded-linux-4.4.3.tar.gz 得qt-embed3、配置支持触摸屏的参数配置:./configure -release -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -make libs -nomake too

20、ls -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g+ -embedded arm -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-usb -no-glib -qt-mouse-tslib -I/h

21、ome/tslib-1.4/include -L/home/tslib-1.4/lib4、#make 5、#make install3.4 PATH与LD_LIBRARY_PATH的设置参考3.3节内容。3.5 配置交叉编译器修改/etc/profile,在有“pathmunge”命令语句处加上如下命令语句:Pathmunge /usr/local/arm-linux/bin3.6 配置minicom、tftp和NFS1、配置minicom开发板上的信息显示给开发人员最常用的就是通过串口线输出到宿主机的显示器上,这样,开发人员就可以看到系统的运行情况了。Minicom 是 Linux 下串口通

22、信的软件,它的使用完全依靠键盘的操作,虽然没有“超级终端”那么易用,但是使用习惯之后读者将会体会到它的高效与便利。下面主要讲解如何对Minicom 进行串口参数的配置。首先在命令行中键入“minicom”,这就启动了 minicom 软件。Minicom 在启动时默认会进行初始化配置,如图 3.1 所示。图 3.1 minicom 启动注意 在 Minicom 的使用中,经常会遇到三个键的操作,如“CTRL-A Z”,这表示先同时按下 CTRL和“A”(大写),然后松开此二键再按下“Z”。正如图 3.1 中的提示,接下来可键入 CTRL+A Z,来查看 minicom 的帮助,如图 3.2所示

23、。按照帮助所示,可键入“O”(代表 Configure Minicom)来配置 minicom 的串口参数,当然也可以直接键入“CTRL-A O”来进行配置,如图 3.3 所示。图3.2 minicom 帮助图 3.3 minicom 配置界面在这个配置框中选择“Serial port setup”子项,进入如图 3.4 所示配置界面。上面列出的配置是 minicom 启动是的默认配置,用户可以通过键入每一项前的大写字母,分别对每一项进行更改。图 3.5 所示为在“Change which setting 中”键入了“A”,此时光标转移到第 A 项的对应处。注意 在 minicom 中“tty

24、S0”对应“COM1”,“ttyS1”对应“COM2”。图3.4 minicom 串口属性配置界面图 3.5 minicom 串口号配置接下来,要对波特率、数据位和停止位进行配置,键入“E”,进入如图 3.6 所示的配置界面。在该配置界面中,可以键入相应波特率、停止位等对应的字母,即可实现配置,配置完成后按回车键就退出了该配置界面,在上层界面中显示如图 3.7 所示配置信息,要注意与图3.4 进行对比,确定相应参数是否已被重新配置。图 3.6 minicom 波特率等配置界面图 3.7 minicom 配置完成后界面到此为止,读者已经能将开发板的系统情况通过串口打印到宿主机上了,这样,就能很好

25、地了解硬件的运行状况。小知识 通过串口打印信息是一个很常见的手段,很多其他情况如路由器等也是通过配置串口的波特率这些参数来显示对应信息的。2、tftptftp 协议是简单文件传输协议,它可以看作是一个 FTP 协议的简化版本,与 FTP 协议相比,它的最大区别在于没有用户管理的功能。它的传输速度快,可以通过防火墙,使用方便快捷,因此在嵌入式的文件传输中广泛使用。tftp 分为客户端和服务器端两种。通常,首先在宿主机上开启 tftp 服务器端服务,设置好 tftp 的根目录内容(也就是供客户端下载的文件),接着,在目标板上开启 tftp的客户端程序(现在很多开发板都已经提供了该项功能)。这样,把

26、目标板和宿主机用直连线相连之后,就可以通过 tftp 协议传输可执行文件了。Linux 下 tftp 的服务器服务是由 xinetd 所设定的,默认情况下是处于关闭状态。首先,要修改 tftp 的配置文件,开启 tftp 服务,如下所示:rootateng tftpboot# vi /etc/xinetd.d/tftp# default: off# description: The tftp server serves files using the trivial file transfer # protocol. The tftp protocol is often used to boo

27、t diskless # workstations, download configuration files to network-aware printers, # and to start the installation process for some operating systems.service tftpsocket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /tftpbootdisable = noper_source = 11cps

28、= 100 2flags = IPv4在这里,主要要将“disable=yes”改为“no”,另外,从“server_args”可以看出,tftp服务器端的默认根目录为“/tftpboot”,用户若需要可以更改为其他目录。接下来,重启 xinetd 服务,使刚才的更改生效,如下所示:rootateng tftpboot# service xinetd restart关闭 xinetd: 确定 启动 xinetd: 确定 接着,使用命令“netstat -au”以确认 tftp 服务是否已经开启,如下所示:rootateng tftpboot# netstat -auActive Interne

29、t connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address Stateudp 0 0 *:32768 *:*udp 0 0 *:831 *:*udp 0 0 *:tftp *:*udp 0 0 *:sunrpc *:*udp 0 0 *:ipp *:*这时,用户就可以把所需要的传输文件放到“/tftpboot”目录下,这样,主机上的 tftp 服务就可以建立起来了。接下来,用直连线(注意:不可以使用网线)把目标板和宿主机连起来,并且将其配置成一个网段的地址,再在目标板上启动 t

30、ftp 客户端程序(注意:不同的开发板所使用的命令可能会不同,读者可以查看帮助来获得确切的命令名及格式),如下所示:=tftpboot 0x30200000 zImageTFTP from server 192.168.1.1; our IP address is 192.168.1.100Filename zImage.Load address: 0x30200000Loading: # # #doneBytes transferred = 881988 (d7544 hex)可以看到,此处目标板使用的 IP 为“192.168.1.100”,宿主机使用的 IP 为“192.168.1.1”

31、,下载到目标板的地址为 0x30200000,文件名为“zImage”。小知识 tftp 是一个很好的文件传输协议,它的简单易用吸引了广大用户。但它同时也存在着较大的安全隐患。由于 tftp 不需要用户的身份认证,因此给了黑客的可乘之机。因此在使用 tftp 时一定要设置一个单独的目录作为 tftp 服务的根目录,如上文所述的“/tftpboot”等。 3、NFS在/etc/exports中加入语句:/ 192.168.0.* (rw,inscure,no_root_squash,no_all_squash)第4章bootloader、Linux内核及文件系统制作与移植4.1 bootload

32、er1、编译cd /pxa270_linux/blob_ours/blob-xscalemake f Makefile.cvs./configure host=arm-linux with-board=mainstone with-linux-prefix=/pxa270_linux/linux/ -enable-xli enable-networkmake(保存在/pxa270_linux/blob_ours/blob-xscale/src/blob下)2、移植(确保开发板上电)cd /pxa270_linux/tools./Jflashmm-linux PXA270 blob p(该命令是

33、寻找PXA270.dat文件所指定的CPU,把blob文件烧写到这个CPU使用的flash中,要求blob,PXA270.dat与Jflashmm-linux在同一个文件夹中,.dat文件不可以加后缀。4.2 Linux内核编译与移植1、编译内核的编译根据不同的情况会有不同的步骤,但其中最主要分别为3 个步骤:内核配置、建立依存关系、建立内核,其他的为一些辅助功能,如清除文件等。(1)内核配置cd /pxa270_linux/linuxmake menuconfig (菜单式配制)在menuconfig 的配置界面是图形化的内核裁减界面。通过此部分,读者可以方便地选择,决定哪些部分被加载并编译

34、入Linux内核,哪些部分被编译为模块,哪些部分不用,如图 4.1 所示。“Load an Alternate Configuration File”选项表示装载一个已经保存好的设置。也可以选择“Save Configuration to an Alternate File”选项保存自己的配置文件。图 4.1 make menuconfig 配置界面此外,要注意 2.6 和 2.4 内核在串口命名上的一个重要区别,在 2.4 内核中“COM1”对应的是“ttyS0”,而在 2.6 内核中“COM1”对应“ttySAC0”,因此在启动参数的子项要格外注意,如图4.3 所示,否则串口打印不出信息。

35、(2)建立依赖关系make dep由于内核源码树中的大多数文件都与一些头文件有依赖关系,因此要顺利建立内核,内核源码树中的每个 Makefile 就必须知道这些依赖关系。建立依赖关系往往发生在第一次编译内核的时候,它会在内核源码树中每个子目录产生一个“.depend”文件。(3)建立内核make cleanmake zImage这里建立的为压缩的内核映像,名为zImage,位于/pxa270_linux/linux/arch/arm/boot目录中。2、移植cp zImage /tftpboot rf (虚拟机终端)以下命令在minicom中完成:blobtftp zImage kernel

36、(下载到内存0xa0008000处)blobfwrite 0xa0008000 0x00040000 0x00200000表示从内存0xa0008000处取出长度为0x00200000的数据,写入flash中0x00040000开始的地址中。4.3文件系统制作与移植1、制作文件系统:cd /pxa270_linux/fs./mkfs.jffs2 r rootfs270 o xscale_fs.jffs2 e 0x40000 pad=0x01000000(根文件系统)./mkfs.jffs2 r junk o junk.jffs2 e 0x40000 pad=0x0dc0000(扩展文件系统)其

37、中,-r后面是指令要做成image的文件夹,默认为当前文件夹;-o后面是指令输出的文件名,-e表擦除块的大小,默认为64KB,-pad表输出文件的大小,为了不浪费flash空间,这个值最好符合flash driver所规划的区块大小,如果不足,则使用0xff来填充补满。2、文件系统移植:cp xscale_fs.jffs2 /tftpboot rf (虚拟机终端)cp junk.jffs2 /tftpboot rf (虚拟机终端)以下命令在minicom中完成:blobtftp xscale_fs.jffs2blobfwrite 0xa1000000 0x00240000 0x01000000

38、blobtftp junk .jffs2blobfwrite 0xa1000000 0x01240000 0x0dc0000表示从内存0xa1000000处取出长度为0x0dc0000的数据,写入flash中0x01240000开始的地址中。第5章 Qt图形编程5.1 嵌入式GUI简介GUI(图形用户界面)是指计算机与其使用者之间的对话接口,它的存在为使用者提供了友好便利的界面,并大大方便了非专业用户的使用,使得人们从烦琐的命令中解脱出来,可以通过窗口、菜单方便地进行操作。Qt/Embedded是Trolltech(奇趣)公司为嵌入式系统开发的Qt版本。从Qt 4.1版本开始,Qt/Embed

39、ded改名为Qtopia Core,又从Qt 4.4.1版本开始,又改名为Qt for Embedded Linux。其优点是:1、以开发包的形式提供,包括了图形设计器、Makefile制作工具、字体国际化工具、Qt的C+类库等。2、支持跨平台(如Microsoft Windows、MacOS X、Linux、Solaris等)。3、类库支持跨平台(封装了适应不同操作系统的访问细节)。4、模块化,可任意裁减(最小可裁减到几百KB,但这时已基本失去了使用价值)。缺点是:结构过于复杂臃肿,很难进行底层的扩充、定制和移植。5.2 Qt/Embedded开发入门5.2.1 Qt/Embedded介绍1

40、、架构如下图所示。应用程序源代码Qt APIQt/EmbeddedQt/X11Qt/XLibX Windows Server帧缓冲Linux内核Qt/Embedded与Qt/X11的Linux版本的比较2、Qt的开发环境Qt桌面版本:Qt/X11或Qt/Windows,结合大家熟知的Visual C+或Borland C+就可以进行开发了。3、Qt的支撑工具Qmake和Qt designer(图形设计器)5.2.2 Qt/Embedded图形界面Qt提供了一整套的窗口部件,它们组合起来可用于创建用户界面的可视元素。窗口部件是QWidget或其子类的实例,用户自定义的窗口通过子类化得到,如下图所

41、示。QObjectQTimerQWidgetQDialogQFrameQSpinBoxQLabelQLineEdit对于初学者来说,使用designer工具设计程序界面非常方便快捷,如秒表程序stopwatch的界面文件digclock.ui效果如下图所示。播放器程序mediaplayer界面文件videoface.ui效果如下图所示。对应的.h文件代码自动生成,但比较复杂,为了熟悉代码,完全可以用代码的形式生成用户界面,如通讯录程序addressbook中的部分代码如下:addressBook:addressBook(QWidget *parent)setWindowTitle(tr(thi

42、s is addressbook.);setFixedSize(lcdWidth,lcdHeight);contacts=new QMap;saveBt=new QPushButton(tr(save);cancelBt=new QPushButton(tr(cancel);findBt=new QPushButton(tr(find);contactName=new QLabel(tr(name);contactTele=new QLabel(tr(telephone);nameDetail=new QLineEdit;teleNo=new QTextEdit ;QHBoxLayout *h

43、layout=new QHBoxLayout;hlayout-addWidget(saveBt,Qt:AlignCenter);hlayout-addWidget(cancelBt,Qt:AlignJustify);hlayout-addWidget(findBt,Qt:AlignCenter);QGridLayout *layout=new QGridLayout;layout-addWidget(contactName,0,0,Qt:AlignRight);layout-addWidget(nameDetail,0,1);layout-addWidget(contactTele,1,0,Q

44、t:AlignTop);layout-addWidget(teleNo,1,1,Qt:AlignLeft);layout-addLayout(hlayout,2,1);setLayout(layout);connect(saveBt,SIGNAL(clicked(),this,SLOT(saveInform();connect(cancelBt,SIGNAL(clicked(),this,SLOT(cancelInform();connect(findBt,SIGNAL(clicked(),this,SLOT(findName();5.2.3 Qt/Embedded信号和槽机制1、机制概述信号

45、(signals)和槽机制是Qt的核心机制,是Qt自行定义的一种通信机制,独立于标准的C/C+语言。所有从QObject或其子类(如QWidget)派生的类都能够包含信号和槽。当对象改变状态时,信号就由该对象发射(Emit)出去了,它不知道另一端是是谁在接收这个信号。槽函数用于接收信号,它们是普通的对象成员函数,一个槽函数并不知道是否有任何信号与自己相连接。对象间信号与插槽的关系用户可以将多个信号与单个槽函数连接,也可以将单个信号与多个槽函数连接,甚至将一个信号与另外一个信号相连接。其间的关系如下图所示。对象2信号1槽1槽2对象1信号1信号2对象3槽1槽22、信号与插槽实现信号的定义:sign

46、als:void mySignal();void mySignal(int x);void mySignalParam(int x,int y);槽函数的定义:public slots:void mySlot();void mySlot(int x);void mySlotParam(int x,int y);信号与插槽关联(通过QObject对象的connect()函数实现)QLabel *label=new QLabel;QScrollBar *scroll=new QScrollBar;QObject:connect(scroll,SIGNAL(valueChanged(int),lab

47、el,SLOT(setNum(int);5.2.4 Qt/Embedded网络编程QTcpSocket和QTcpServer类,具体查看Qt的帮助文档。第6章 聊天系统设计与实现6.1 聊天系统需求分析1、使用对象:09计嵌。2、系统说明:以宿舍为单位,主界面中的成员为全班同学,聊天包括私聊、群聊(信息仅限于本宿成员)和广播(全班同学都能看到);ID为各自的学号,禁止非本班同学登录。3、功能分析:注册、登录、下线、加入群、退出群、添加和修改个人信息、聊天、提供对用户信息和聊天信息的保存等。6.2 界面设计 服务器端创建聊天室 客户端登录界面6.3 网络相关部分的实现服务器端程序部分代码:Tcp

48、Server:TcpServer(QWidget *parent,Qt:WindowFlags f):QDialog(parent,f)setWindowTitle(tr(TCP Server);QVBoxLayout *vbMain=new QVBoxLayout(this);ListWidgetContent=new QListWidget(this);vbMain-addWidget(ListWidgetContent);QHBoxLayout *hb=new QHBoxLayout();LabelPort=new QLabel(this);LabelPort-setText(tr(Po

49、rt);hb-addWidget(LabelPort);LineEditPort=new QLineEdit(this);hb-addWidget(LineEditPort);vbMain-addLayout(hb);PushButtonCreate=new QPushButton(this);PushButtonCreate-setText(tr(create);vbMain-addWidget(PushButtonCreate);connect(PushButtonCreate,SIGNAL(clicked(),this,SLOT(slotCreateServer();port=8010;

50、LineEditPort-setText(QString:number(port);TcpServer:TcpServer()void TcpServer:slotCreateServer()server=new Server(this,port);connect(server,SIGNAL(updateServer(QString,int),this,SLOT(updateServer(QString,int);PushButtonCreate-setEnabled(false);void TcpServer:updateServer(QString msg,int length)ListW

51、idgetContent-addItem(msg.left(length);TcpClientSocket:TcpClientSocket(QObject *parent)connect(this,SIGNAL(readyRead(),this,SLOT(dataReceived();connect(this,SIGNAL(disconnected(),this,SLOT(slotDisconnected();void TcpClientSocket:dataReceived()while(bytesAvailable()0)char buf1024;int length=bytesAvail

52、able();read(buf,length);QString msg=buf;emit updateClients(msg,length);TcpClientSocket:TcpClientSocket()void TcpClientSocket:slotDisconnected()this-close();emit disconnected(this-socketDescriptor();Server:Server(QObject *parent,int port):QTcpServer(parent)listen(QHostAddress:Any,port);void Server:in

53、comingConnection(int socketDescriptor)TcpClientSocket *tcpClientSocket=new TcpClientSocket(this);connect(tcpClientSocket,SIGNAL(updateClients(QString,int),this,SLOT(updateClients(QString,int);connect(tcpClientSocket,SIGNAL(disconnected(int),this,SLOT(slotDisconnected(int);tcpClientSocket-setSocketDe

54、scriptor(socketDescriptor);tcpClientSocketList.append(tcpClientSocket);void Server:updateClients(QString msg,int length)emit updateServer(msg,length);for(int i=0;iwrite(msg.toLatin1(),length)!=length)continue;void Server:slotDisconnected(int descriptor)for(int i=0;isocketDescriptor()=descriptor)tcpC

55、lientSocketList.removeAt(i);return;return;客户端程序部分代码:TcpClient:TcpClient(QDialog *parent,Qt:WindowFlags f):QDialog(parent,f),status(false),port(8010)setWindowTitle(tr(TCP client);ListWidgetContent=new QListWidget;LineEditMsg=new QLineEdit;PushButtonSend=new QPushButton(tr(send);PushButtonSend-setEnab

56、led(false);QHBoxLayout *msgLayout=new QHBoxLayout;msgLayout-addWidget(LineEditMsg);msgLayout-addWidget(PushButtonSend);QHBoxLayout *userLayout=new QHBoxLayout;userNameLabel=new QLabel(tr(user name:);LineEditUser=new QLineEdit;userLayout-addWidget(userNameLabel);userLayout-addWidget(LineEditUser);QHB

57、oxLayout *serverIPLayout=new QHBoxLayout;serverIPLabel=new QLabel(tr(server IP:);LineEditServerIP=new QLineEdit;serverIPLayout-addWidget(serverIPLabel);serverIPLayout-addWidget(LineEditServerIP);QHBoxLayout *portLayout=new QHBoxLayout;portLabel=new QLabel(tr(port Num:);LineEditPort=new QLineEdit;LineEditPort-setText(QString:number(port);portLayout-addWidget(portLabel);portLayout-addWidget(LineEditPort);PushButtonEnter=new QPushButton(tr(enter);QVBoxLayout *mainlayout=new QVBoxLayout;mainlayout-addWidget(ListWidgetContent);mainlayout-addLayo

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!