经典嵌入式-硬件软件开发软件及常用命令综合_第1页
经典嵌入式-硬件软件开发软件及常用命令综合_第2页
经典嵌入式-硬件软件开发软件及常用命令综合_第3页
经典嵌入式-硬件软件开发软件及常用命令综合_第4页
经典嵌入式-硬件软件开发软件及常用命令综合_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1 第第 章章 嵌入式硬件开发环境嵌入式硬件开发环境 1 11 1 嵌入式系统的概念嵌入式系统的概念 以应用为中心 以计算机技术为基础 软硬件可裁剪 适应应用系统对功能 可靠性 成本 体积 功耗严格要求的专用计算机系统 开发机称为宿主机 应用机称为目标机 1 21 2 熟悉熟悉 OURSOURS PXA270RPPXA270RP 实验箱的硬件环境实验箱的硬件环境 1 认识核心板和扩展板 2 认识 nor flash nand flash sdram ARM 处理器 3 熟悉电源接口 并口 JTAG 接口 串口 网口 USB 接口 4 熟练掌握将 PC 机与开发实验箱的连接 第第二二章章 LinuxLinux 常用命令常用命令 Shell 与用户间的关系如图 2 1 所示 用户在提示符下输入的命令都由 Shell 先解释然 后传给 Linux 内核 图 2 1 内核 Shell 和用户的关系 小知识 命令的使用可以通过 man 命令名或命令名 help 的方式获得帮助 1 ls 列出目录的内容 常用参数有 l 长文件名显示格式 和 a 显示所有文件 显 示格式为 文件类型与权限 链接数文件属主文件属组文件大小修改的时间名 字 2 find 在指定目录中搜索文件 常用参数为 name 如 find usr qpe pic name png 3 cd 改变工作目录 可使用 cd 回到前次工作目录 代表当前目录 代表上 级目录 4 mkdir 创建一个目录 可以一次建立多个目录 常用参数有 p 自动创建指定路径 2 中不存在的目录 如 mkdir home lny myfile 5 rm 删除一个目录中的一个或多个文件或目录 常用参数 f 删除已存在的目标文件而不 提示 i 在覆盖目标文件前要求用户确认 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 fonts 9 fdisk 可以查看硬盘分区情况 并可对硬盘进行分区管理 如 fdisk l 10 mount 磁盘挂载命令 如挂载根目录 mount o soft timeo 100 rsize 1024 192 168 0 10 0 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 usr local Trolltech Qt 4 4 3 export LD LIBRARY PATH QTDIR lib LD LIBRARY PATH 13 chmod 改变文件的访问权限 文件的访问权限可表示成 rwx rwx rwx 在此设 有三种不同的访问权限 读 r 写 w 和运行 x 三个不同的用户级别 文件拥 有者 u 所属的用户组 g 和系统里的其他用户 o 可增加一个用户级别 a all 来表示所有这三个不同的用户级别 对于第一种符号连接方式的 chmod 命令中 用加号 代表增加权限 用减号 删除权限 等于号 设置权限 如 chmod a rx u w home lny myfile 对于第二种八进制数指定的方式 将文件权限字符代表的有效位设为 1 即 rw rw 和 r 的八进制表示为 110 110 100 把这个 2 进制串转换成对应的 8 进制数就是 6 6 4 也就是说该文件的权限为 664 三位八进制数 如 chmod 765 home lny myfile 14 tar 对文件目录进行打包或解包 常用参数有 c 建立新的打包文件 f 对普通文件操 作 x 从打包文件中解出文件 v 处理过程中输出相关信息 z 调用 gzip 来压 缩打包文件 与 x 联用时调用 gzip 完成解压缩 j 调用 bzip2 来压缩打包文件 与 x 联用时调用 bzip2 完成解压缩 如 tar zcvf lny tar gz home lny tar jxvf linux 2 6 11 tar bz2 3 第第三三章章 搭建嵌入式搭建嵌入式 LinuxLinux 开发环境开发环境 3 13 1 vwaretoolsvwaretools 的安装与共享设置的安装与共享设置 1 安装 VMware tools 以方便鼠标内外移动 确保 虚拟化 不选 步骤如下 VM 菜单 VMware tools install 是 将光驱 linux 中的光驱 的 VMware tools 中的 Vmwaretools 6 0 2 59824 tar gz 复制到目录 root 下 在终端对 Vmwaretools 6 0 2 59824 tar gz 进行解压 tar zxvf Vmwaretools 6 0 2 59824 tar gz cd vmware tools distrib vmware install pl 全部选 yes 注意有一个默认为 no 的选项改为 yes 2 设置 windows 与 linux 相互共享 Windows 下访问 linux 的内容 确保网线正确连接 确保网络端口激活 系统 管理 网络 设置静态 IP 并激活 确保 samba 服务安装并启动 系统 管理 服务器设置 services 中勾选 smb 选项 添加 samba 用户 必须是存在的用户 如果冲突 则注释 etc samba smbusers 中对应的用户名 首选项 samba 用户 添加用户 添加共享 选择共享目录和设置共享对象权限等 通过 192 168 11 7 即 虚拟机 ip 的形式访问 3 Linux 下访问 windows 的内容 确保安装时没有选择 虚拟化 选项 菜单 VM settings options shared folds add 在 linux 系统下通过 mnt hgfs 目录访问 windows 中共享文件夹 3 23 2 tslib 1 4tslib 1 4 的编译安装的编译安装 假设源码解压目录为 home tslib 1 4 1 cd home tslib 1 4 autogen sh 生成 congigure 2 configure host arm linux cache file arm linux cache 加上参数 prefix home tslib 1 4 可以看到头文件 3 make 出现错误 undefined reference rpl malloc 4 解决 将 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 so pthres so linear so input so variance so dejitter so 等 库文件版本为 libts 0 0 so 0 1 1 5 拷贝 mkdir tslib 1 4 cd tslib 1 4 mkdir 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 拷到其中 结合自己的触摸屏型号 删除部分库文 件 目录 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 因为我的触摸屏型号为 ucb1x00 export TSLIBDIR home tslib 1 4 export TSLIB CONFFILE TSLIBDIR etc ts conf export TSLIB PLUGINDIR TSLIBDIR plugins export TSLIB FBDEVICE dev fb0 export TSLIB CONSOLEDEVICE none export POINTERCAL FILE etc pointercal 生成校准文件 export LD LIBRARY PATH TSLIBDIR lib export QWS MOUSE PROTO TPanel dev touchscreen ucb1x00 export 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 1 module variance delta 30 module dejitter delta 100 module linear 执行 ts calibrate 顺利通过 5 3 33 3 qtX11qtX11 和和 qtE4qtE4 的编译安装的编译安装 一 QT X11 环境的配置 1 解压 qt x11 4 4 3 tar gz 2 cd 解压了的目录 QT X11 3 configure 生成 Makefile make 要好几个小时 约 3 个半小时 make install 安装完后会生成目录 usr local Trolltech QT 4 4 3 这时刚才解压完 得到的 QT X11 可以不要了 4 设置环境变量 实际上是设置编译环境 在 etc profile 加入 for QT X11 4 4 3 export QTDIR usr local Trolltech Qt 4 4 3 export LD LIBRARY PATH QTDIR lib LD LIBRARY PATH export PATH QTDIR bin PATH export 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 PATH 2 解压 qt embedded linux 4 4 3 tar gz 得 qt embed 3 配置 支持触摸屏的参数配置 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 tools 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 home tslib 1 4 include L home tslib 1 4 lib 4 make 5 make install 3 43 4 PATHPATH 与与 LD LIBRARY PATHLD LIBRARY PATH 的设置的设置 参考 3 3 节内容 6 3 53 5 配置交叉编译器配置交叉编译器 修改 etc profile 在有 pathmunge 命令语句处加上如下命令语句 Pathmunge usr local arm linux bin 3 63 6 配置配置 minicomminicom tftptftp 和和 NFSNFS 1 配置 minicom 开发板上的信息显示给开发人员最常用的就是通过串口线输出到宿主机的显示器上 这样 开发人员就可以看到系统的运行情况了 Minicom 是 Linux 下串口通信的软件 它的使用 完全依靠键盘的操作 虽然没有 超级终端 那么易用 但是使用习惯之后读者将会体会到 它的高效与便利 下面主要讲解如何对 Minicom 进行串口参数的配置 首先在命令行中键入 minicom 这就启动了 minicom 软件 Minicom 在启动时默认会进 行初始化配置 如图 3 1 所示 图 3 1 minicom 启动 注意 在 Minicom 的使用中 经常会遇到三个键的操作 如 CTRL A Z 这表示先同时 按下 CTRL 和 A 大写 然后松开此二键再按下 Z 正如图 3 1 中的提示 接下来可键入 CTRL A Z 来查看 minicom 的帮助 如图 3 2 所 示 按照帮助所示 可键入 O 代表 Configure Minicom 来配置 minicom 的串口参数 当然也可以直接键入 CTRL A O 来进行配置 如图 3 3 所示 7 图 3 2 minicom 帮助 图 3 3 minicom 配置界面 在这个配置框中选择 Serial port setup 子项 进入如图 3 4 所示配置界面 上面列出 的配置是 minicom 启动是的默认配置 用户可以通过键入每一项前的大写字母 分别对每 一项进行更改 图 3 5 所示为在 Change which setting 中 键入了 A 此时光标转移到第 A 项的对应处 注意 在 minicom 中 ttyS0 对应 COM1 ttyS1 对应 COM2 图 3 4 minicom 串口属性配置界面 8 图 3 5 minicom 串口号配置 接下来 要对波特率 数据位和停止位进行配置 键入 E 进入如图 3 6 所示的配 置界面 在该配置界面中 可以键入相应波特率 停止位等对应的字母 即可实现配置 配置 完成后按回车键就退出了该配置界面 在上层界面中显示如图 3 7 所示配置信息 要注意 与图 3 4 进行对比 确定相应参数是否已被重新配置 图 3 6 minicom 波特率等配置界面 图 3 7 minicom 配置完成后界面 到此为止 读者已经能将开发板的系统情况通过串口打印到宿主机上了 这样 就能 很好地了解硬件的运行状况 小知识 通过串口打印信息是一个很常见的手段 很多其他情况如路由器等也是通过 配置串口的波特率这些参数来显示对应信息的 2 tftp tftp 协议是简单文件传输协议 它可以看作是一个 FTP 协议的简化版本 与 FTP 协 议相比 它的最大区别在于没有用户管理的功能 它的传输速度快 可以通过防火墙 使 用方便快捷 因此在嵌入式的文件传输中广泛使用 tftp 分为客户端和服务器端两种 通常 首先在宿主机上开启 tftp 服务器端服务 设 置好 tftp 的根目录内容 也就是供客户端下载的文件 接着 在目标板上开启 tftp 的客 9 户端程序 现在很多开发板都已经提供了该项功能 这样 把目标板和宿主机用直连线相 连之后 就可以通过 tftp 协议传输可执行文件了 Linux 下 tftp 的服务器服务是由 xinetd 所设定的 默认情况下是处于关闭状态 首 先 要修改 tftp 的配置文件 开启 tftp 服务 如下所示 root ateng 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 boot diskless workstations download configuration files to network aware printers and to start the installation process for some operating systems service tftp socket type dgram protocol udp wait yes user root server usr sbin in tftpd server args s tftpboot disable no per source 11 cps 100 2 flags IPv4 在这里 主要要将 disable yes 改为 no 另外 从 server args 可以看出 tftp 服务 器端的默认根目录为 tftpboot 用户若需要可以更改为其他目录 接下来 重启 xinetd 服务 使刚才的更改生效 如下所示 root ateng tftpboot service xinetd restart 关闭 xinetd 确定 启动 xinetd 确定 接着 使用命令 netstat au 以确认 tftp 服务是否已经开启 如下所示 10 root ateng tftpboot netstatnetstat au au Active Internet connections servers and established Proto Recv Q Send Q Local Address Foreign Address State udp 0 0 32768 udp 0 0 831 udp 0 0 tftp udp 0 0 sunrpc udp 0 0 ipp 这时 用户就可以把所需要的传输文件放到 tftpboot 目录下 这样 主机上的 tftp 服务就可以建立起来了 接下来 用直连线 注意 不可以使用网线 把目标板和宿主机连起来 并且将其配 置成一个网段的地址 再在目标板上启动 tftp 客户端程序 注意 不同的开发板所使用的 命令可能会不同 读者可以查看帮助来获得确切的命令名及格式 如下所示 tftpboot 0 x30200000 zImage TFTP from server 192 168 1 1 our IP address is 192 168 1 100 Filename zImage Load address 0 x30200000 Loading done Bytes transferred 881988 d7544 hex 可以看到 此处目标板使用的 IP 为 192 168 1 100 宿主机使用的 IP 为 192 168 1 1 下载到目标板的地址为 0 x30200000 文件名为 zImage 小知识 tftp 是一个很好的文件传输协议 它的简单易用吸引了广大用户 但它同时也存 在着较大的安全隐患 由于 tftp 不需要用户的身份认证 因此给了黑客的可乘之机 因此 在使用 tftp 时一定要设置一个单独的目录作为 tftp 服务的根目录 如上文所述的 tftpboot 等 3 NFS 在 etc exports 中加入语句 192 168 0 rw inscure no root squash no all squash 11 第第 4 4 章章 bootloaderbootloader LinuxLinux 内核及文件系统制作与移植内核及文件系统制作与移植 4 14 1 bootloaderbootloader 1 编译 cd pxa270 linux blob ours blob xscale make f Makefile cvs configure host arm linux with board mainstone with linux prefix pxa270 linux linux enable xli enable network make 保存在 pxa270 linux blob ours blob xscale src blob 下 2 移植 确保开发板上电 cd pxa270 linux tools Jflashmm linux PXA270 blob p 该命令是寻找 PXA270 dat 文件所指定的 CPU 把 blob 文 件烧写到这个 CPU 使用的 flash 中 要求 blob PXA270 dat 与 Jflashmm linux 在同一个文件 夹中 dat 文件不可以加后缀 4 24 2 LinuxLinux 内核编译与移植内核编译与移植 1 编译 内核的编译根据不同的情况会有不同的步骤 但其中最主要分别为 3 个步骤 内核配 置 建立依存关系 建立内核 其他的为一些辅助功能 如清除文件等 1 内核配置 cd pxa270 linux linux make menuconfig 菜单式配制 在 menuconfig 的配置界面是图形化的内核裁减界面 通过此部分 读者可以方便地选 择 决定哪些部分被加载并编译入 Linux 内核 哪些部分被编译为模块 哪些部分不用 如图 4 1 所示 Load an Alternate Configuration File 选项表示装载一个已经保存好的设 置 也可以选择 Save Configuration to an Alternate File 选项保存自己的配置文件 12 图 4 1 make menuconfig 配置界面 此外 要注意 2 6 和 2 4 内核在串口命名上的一个重要区别 在 2 4 内核中 COM1 对应的是 ttyS0 而在 2 6 内核中 COM1 对应 ttySAC0 因此在启动参数的子项要格外 注意 如图 4 3 所示 否则串口打印不出信息 2 建立依赖关系 make dep 由于内核源码树中的大多数文件都与一些头文件有依赖关系 因此要顺利建立内核 内核源码树中的每个 Makefile 就必须知道这些依赖关系 建立依赖关系往往发生在第一 次编译内核的时候 它会在内核源码树中每个子目录产生一个 depend 文件 3 建立内核 make clean make zImage 这里建立的为压缩的内核映像 名为 zImage 位于 pxa270 linux linux arch arm boot 目 录中 2 移植 cp zImage tftpboot rf 虚拟机终端 以下命令在 minicom 中完成 blob tftp zImage kernel 下载到内存 0 xa0008000 处 blob fwrite 0 xa0008000 0 x00040000 0 x00200000 表示从内存0 xa0008000处取出长度为0 x00200000的数据 写入flash中0 x00040000开始的地 址中 4 34 3 文件系统制作与移植文件系统制作与移植 1 制作文件系统 cd pxa270 linux fs mkfs jffs2 r rootfs270 o xscale fs jffs2 e 0 x40000 pad 0 x01000000 根文件系统 mkfs jffs2 r junk o junk jffs2 e 0 x40000 pad 0 x0dc0000 扩展文件系统 其中 r 后面是指令要做成 image 的文件夹 默认为当前文件夹 o 后面是指令输出的文 件名 e 表擦除块的大小 默认为 64KB pad 表输出文件的大小 为了不浪费 flash 空间 这个值最好符合 flash driver 所规划的区块大小 如果不足 则使用 0 xff 来填充补满 2 文件系统移植 cp xscale fs jffs2 tftpboot rf 虚拟机终端 cp junk jffs2 tftpboot rf 虚拟机终端 以下命令在 minicom 中完成 blob tftp xscale fs jffs2 13 blob fwrite 0 xa1000000 0 x00240000 0 x01000000 blob tftp junk jffs2 blob fwrite 0 xa1000000 0 x01240000 0 x0dc0000 表示从内存0 xa1000000处取出长度为0 x0dc0000的数据 写入flash中0 x01240000开始的地址 中 第第 5 5 章章 QtQt 图形编程图形编程 5 15 1 嵌入式嵌入式 GUIGUI 简介简介 GUI 图形用户界面 是指计算机与其使用者之间的对话接口 它的存在为使用者提供 了友好便利的界面 并大大方便了非专业用户的使用 使得人们从烦琐的命令中解脱出来 可以通过窗口 菜单方便地进行操作 Qt Embedded 是 Trolltech 奇趣 公司为嵌入式系统开发的 Qt 版本 从 Qt 4 1 版本开始 Qt Embedded 改名为 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 25 2 Qt EmbeddedQt Embedded 开发入门开发入门 5 2 15 2 1 Qt EmbeddedQt Embedded 介绍介绍 1 架构如下图所示 应用程序源代码 Qt API Qt X11 Qt XLib Qt Embedded X Windows Server 帧缓冲 Linux 内核 Qt Embedded 与 Qt X11 的 Linux 版本的比较 2 Qt 的开发环境 14 Qt 桌面版本 Qt X11 或 Qt Windows 结合大家熟知的 Visual C 或 Borland C 就可 以进行开发了 3 Qt 的支撑工具 Qmake 和 Qt designer 图形设计器 5 2 25 2 2 Qt EmbeddedQt Embedded 图形界面图形界面 Qt 提供了一整套的窗口部件 它们组合起来可用于创建用户界面的可视元素 窗口部 件是 QWidget 或其子类的实例 用户自定义的窗口通过子类化得到 如下图所示 QObje ct QTime r QWid get QDial og QFram e QSpinB ox QLabe l QLineEd it 对于初学者来说 使用 designer 工具设计程序界面非常方便快捷 如秒表程序 stopwatch 的界面文件 digclock ui 效果如下图所示 播放器程序 mediaplayer 界面文件 videoface ui 效果如下图所示 15 对应的 h 文件代码自动生成 但比较复杂 为了熟悉代码 完全可以用代码的形式生 成用户界面 如通讯录程序 addressbook 中的部分代码如下 addressBook addressBook QWidget parent setWindowTitle tr this 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 hlayout 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 Qt 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 16 5 2 35 2 3 Qt EmbeddedQt Embedded 信号和槽机制信号和槽机制 1 机制概述 信号 signals 和槽机制是 Qt 的核心机制 是 Qt 自行定义的一种通信机制 独立于 标准的 C C 语言 所有从 QObject 或其子类 如 QWidget 派生的类都能够包含信号和 槽 当对象改变状态时 信号就由该对象发射 Emit 出去了 它不知道另一端是是谁在 接收这个信号 槽函数用于接收信号 它们是普通的对象成员函数 一个槽函数并不知道 是否有任何信号与自己相连接 用户可以将多个信号与单个槽函数连接 也可以将单个信号与多个槽函数连接 甚至 将一个信号与另外一个信号相连接 其间的关系如下图所示 2 信号与插槽实现 信号的定义 signals 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 label SLOT setNum int 对象 2 信号 1 槽 1 槽 2 对象 1 信号 1 信号 2 对象 3 槽 1 槽 2 对象间信号与插槽的关系 17 5 2 45 2 4 Qt EmbeddedQt Embedded 网络编程网络编程 QTcpSocket 和 QTcpServer 类 具体查看 Qt 的帮助文档 第第 6 6 章章 聊天系统设计与实现聊天系统设计与实现 6 16 1 聊天系统需求分析聊天系统需求分析 1 使用对象 09 计嵌 2 系统说明 以宿舍为单位 主界面中的成员为全班同学 聊天包括私聊 群聊 信息仅 限于本宿成员 和广播 全班同学都能看到 ID 为各自的学号 禁止非本班同学登录 3 功能分析 注册 登录 下线 加入群 退出群 添加和修改个人信息 聊天 提供对 用户信息和聊天信息的保存等 6 26 2 界面设计界面设计 服务器端创建聊天室 客户端登录界面 6 36 3 网络相关部分的实现网络相关部分的实现 服务器端程序部分代码 TcpServer 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 18 LabelPort new QLabel this LabelPort setText tr Port 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 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 ListWidgetContent 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 buf 1024 int length bytesAvailable read buf length QString msg buf 19 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 incomingConnection 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 setSocketDescriptor 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 20 for int i 0 isocketDescriptor descriptor tcpClientSocketList 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 setEnabled 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 QHBoxLayout 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 21 PushButtonEnter new QPushButton tr enter QVBoxLayout mainlayout new QVBoxLayout mainlayout addWidget ListWidgetContent mainlayout addLayout msgLayout mainlayout addLayout userLayout mainlayout addLayout serverIPLayout mainlayout addLayout portLayout mainlayout addWidget PushButtonEnter setLayout mainlayout serverIP new QHostAddress tcpSocket new QTcpSocket this connect PushButtonSend SIGNAL clicked this SLOT slotSend connect PushButtonEnter SIGNAL clicked this SLOT slotEnter connect tcpSocket SIGNAL connected this SLOT slotConnected connect tcpSocket SIGNAL disconnected this SLOT slotDisconnected connect tcpSocket SIGNAL readyRead this SLOT dataReceived TcpClient TcpClient void TcpClient slotSend int length 0 QString sendMsg LineEditMsg text Q

温馨提示

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

评论

0/150

提交评论