基于QT的局域网通讯聊天室系统设计与实现.docx
ABSTRACTABSTRACTScienceandtechnologyintheincreasinglyupgrades,networktransmissiontoolisvaried,rich,andintheseaofthescienceandtechnology,thecommunicationsoftwareSeemStohavebecomemoreimportant,itisthebridgeofcommunicationbetweenpeople,itcanhelppeopletobetterfinishthework,facilitatecommunication,maketheworkefficiencygreatlyimproved,sothatthepersonisunabletoleavethenetwork,withoutcommunication.Current,chattoolsaremany,suchasQQ,WeChat,thereisalsoachatfunction,theseareallneedtoprovideaccesstotheInternetenvironmentcanchat,andthesecommonchattoolsforenterprisestaff,butthesetoolshavetoomanyotherentertainmentfunctions,willaffecttheenterprisestaffsworkefficiency,inordertoprovidetheefficiencyoftheenterprisestaff,butalsototheneedsofthestafftobeabletotimelycommunication,designanddevelopalocalareanetwork(LAN)basedonQTtechnologyintegratingwordsandsendthefileofchatsoftware.ThisdesignisbasedonthetechnologyofQTandc+achievedsendtextmessages,transferfiles,andotherfunctions,inordertobeabletohavegoodscalabilityandmaintainability,usingQTCreatorchatsoftwareapplicationdevelopment,usingtheSQLitedatabasefordatastoragemanagement,afterthevalidationtest,thesystemrealizedthefunctionofchatting,achievedthedesignpurpose.Keywords:Chat;QT;C+第1章绪论11.1 开发背景11.2 国内外研究现状11.3 研究目标和方法21.4 主要研究内容3第璋相关技术简介42.1 QT开发环境概述42.1.1 QT特点42.1.2 QT类库52.1.3 QT对象通讯机制62.2 编译调试工具简介7第3章可彳锹分析93.1 经济可行性93.2 技术可行性93.3 操作可行性93.4 法律方面可行性分析9第4章需求分析114.1 需求分析114.1.1 功能需求分析114.1.2 性能需求分析114.2 系统用例分析124.3 类与对象模型13第5章系统145.1 总体结构145.2 系统流程设计145.2.1 事件附图设计145.22状态图设计1552.3系统数据流图设计155.3 数据库设计17第6章系统实现186.1 系统主界面模块186.2 聊天室模块226.3 发送接收文件模块27第7章系颁I试297.1 软件测试的概念和原则297.2 测试的过程297.3 系统的运行环境307.4 系统维护307.5 系统存在的不足30献语31参考文献32致谢33第1章绪论1.1 开发背景企业内部各部门以及部门内的人员工作,往往是无法离开沟通和交流,而以往的沟通方式都是传真或者是公司内部电话,这种方式的沟通虽然非常直接,但是有着很多的缺点,效率低,并且相对麻烦。如今,网络发达,网上的资源更是庞大,工作中资源的交流以及输入输出都离不开网络,传统方式将默默的被淘汰,而以计算机科技将会代替之。网络上的沟通有着许多的优势,便捷性好,部署简单,方便公司管理。因此,公司有一套用于内部信息交流的系统非常重要。系统拥有着公司邮箱,集体视频会议,点对点沟通等功能,而项目的研究在国内外都还算成熟,典型的项目例如微软的Lync,腾讯的RTX等。现今的通讯工具往往是即使信息交互,这种功能的出现大力的推动着公司企业的发展,能使公司人员之间的交流,便捷化,高效化。企业人员相互交换信息,加强公司内部的合作性,促进资源的流动。但是一般的高性能即时通讯工具收费都狠高,使得公司内部无法普及。这样的话一项具备方便,快捷,安全的局域网聊天系统就尤为的重要,本设计开发的局域网语音聊天软件适用于企业内部使用,既充分利用了网络资源,又保证了内部信息的安全。本工具才用的是C/S架构,软件由客户端及服务器两部分组成,所使用的程序语言为C/C+,数据的存储主要是SQLite数据表。服务器用于后台处理数据,客户端面向用户,其用着美观的界面以及良好的人机交互效果。1.2 国内外研究现状即时通信软件最早出自于芬兰的IRC,时间大概是1988年间。后来以色列的Mirabilis公司带着他的软件冲击着这个通讯市场,那就是ICQ,这款软件就是当年腾讯所模范的”老师“,当然不仅仅是腾讯,早些年是美国的AOL公司开发的instantMeSSenger,以及雅虎公司开发的YahooMessenger以及操作系统龙头老大微软开发的MSNMessenger等纷纷效仿。目前即时通信工具己经风靡全世界,IBM公司的Sametime7,和微软公司的MSN最为风行。现在最为成熟的企业通讯交流工具是Sametime,其是用NOteS语言来开发的,软件的界面是用JAVA语言来实现的,但是这款软件的售价非常的高昂,一般的中小型企业是无法接受的。如今国内市场的高效通讯软件有很多,最为显著的就是QQ,米聊,淘宝旺旺这些。但是流行的即时聊天软件是以QQ为龙头老大。腾讯QQ坐拥着大量的用户,而成功的背后必然是科技技术及运营手段的领先,我们只看科技方面,QQ拥有着大量的软件功能,它可以在移动端聊天通讯,可以创立多个聊天室,网络邮箱,点对点的文件传输等功能。不仅仅是这些基础的功能,腾讯QQ更是可以在线请求语音通话以及面对面视频功能,它是一款极其强大的即时通讯软件。虽说国内有着像QQ这样强大的通讯软件,但是国内的通讯软件市场依旧是短缺且杂乱,很多大的企业要付着高昂的代价使用一些高端的企业内通讯软体,而这些代价无疑是给企业的运维添加着成本,而假如去使用非正规渠道的软件,又可背上其他昂贵的版权纠纷。1.3 研究目标和方法首先要明确研究步骤,第一步要进行对项目的需求分析,明确本次项目的基本功能,然后就是展开对研究的调查,收集研究文献,了解更多的技术内容,其次就是对项目可行性的研究和扩展。其中,项目所需的开发环境和技术支持:项目是关于网络聊天软件,该项目应用与WINDOW系统,主要采用C/S结构进行开发,使系统更加独立清晰化,能进行局部实时刷新。本系统前台使用WindOWS系统下的QT集成开发环境进行开发,采用C+语言进行代码编写,C+语言是面向对象的语言,其功能强大和灵活。本系统后台使用SQLite数据库实现数据库管理。1.4 主要研究内容本系统主要是满足于聊天室管理的基本需要,主要需求是文字聊天、文件发送等主要功能。在界面上力求做到美观、大方。操作方面尽量避免由于会员操作不当带来系统的出错现象。对数据库操作的性能需要做到优化,数据库过大将会影响运行速度。研究的具体工作如下:(1)绪论部分:大体的介绍项目研究意义,以及国内国外对类似项目研究的情况,以及项目的研究手段。(2)相关技术:该部分是讲解介绍项目所用工具和技术的理论。(3)需求分析:解析项目的所需完成的功能及性能分析。(4)系统设计:介绍项目软件总的设计流程和步骤,其中包括用例图的绘制以及项目数据库的分析。(5)详细设计:主要包括聊天室管理系统界面设计和代码实现等(6)系统测试:利用软件测试的方法来观测项目设计是否符合需求。(7)总结:总结本文开发过程以及希望存在的问题及改进的地方等。第2章相关技术简介2.1 QT开发环境概述2.1.1 QT特点1 .可移植性QT是跨平台的C÷+应用程序框架,它既可以在LINUX上使用开发,也可以满足WlNDoWS上开发的需求,增强代码的可移植性。2 .国际化国际化指的是一种地区语言开发的项目软件能够简便的给其他地区使用,而QT是支持代码本地化的,用户所编写的Ul界面的文本是可以通过翻译表来转化为本地文本语言。Qt有着强大的IingUiSt界面工具,它可以很方便的让开发代码翻译为本地语言,这个工具实现了软件的国际化。3 .面向对象QT所用语言是cc+,其本身就是这语言的应用框架,该语言是面向对象来设计软件的。QT有着独特的功能模块设计,以及良好的Ul体验,让用户无需知道组件功能可以方便使用,Qt特有的SignaI和SIot机制,所谓槽函数机制来实现通信和信息传递。4 .可用户化的外观Qt有着多种主题外观,不管是在WlNDOWS或者是LINUX上的外观其都可以支持用户在界面上改变运行的时间或者是界面的互换。5 .独有的SignaISlot机制QT用于着一种强大的事件处理机制,那就是SignaISk)T机制,在WlNDoWS系统中,软件通过事件的循环以及消息的传递机制来实现软件图像的实现,对象的操作处理也是由此解决的。在QT里,SLOT就好比是事件函数也叫槽,Signal就是所谓的事件,而这两者的链接就是靠的connects这种调用方式非常的安全可靠,它允许代码的回调实现,这使得QT成为真正的编程软件。6 .开发程序的方便性QTDesigner是QT的一种可视化的代码开发工具,其功能强大有些类似于Windows中的VS+,它两都有个共同点,就是可以直接向自己的项目增加各种各样的部件,开发人员无需再去按部就班的编写程序,就这么个特点就是别的软件无法比拟的。这无疑证实着QT开发程序的简便,而且QT有着链接互联网的开发帮助文档,这个文档包含着像LINUX中的man啊,以及本身的QTManUal.这些文档对初学者或者是专业人员都是非常有用且方便的。7 .强大的功能QT其功能的强大是多方面的,它拥有着非常优秀的界面UI设计功能,它能利用现有的部件开发应用界面;以及其还包含大量的接口函数,数量大概有个300左右的C+的类;并且QT具备了强大的绘画功能,不管是2D或者3D图像都可以实现,它能够再任意的显示绘画设备中设计图像界面。2.1.2 QT类库Qt类库大致可以分为三个部分:控件,框架和工具。1 .控件QT内部控件涵盖了环境控件和主窗口控件和标准对话框,各种的GUl控件,联网式的用户帮助文档。环境控件大致的功能就是为QT开发的应用程序提供着大量的全局服务的对象,其中包含了一些系统性的设置和所谓的国际化标准。比如QTranslator可以用于翻译各式的国际语言,Qapplication能够管理GUl程序的控制流。主窗口控件提供了程序的Ul界面框架,主要的例子就是QMainWindOW,其主管着程序的主窗口界面,它允许用户向界面添加各式各样的控件及工具,如QToolBarsiQDockWidgetSo标准对话框就是QT用于简化程序开发所配置了一系列的经典对话框,其主要有5中标准的对话框,如QFileDialog,QcolorDialog,QFotDialog,QinputDialog,QMessageBoxoQFileDialOg可用于选择打开文件,选择目录及远程网络文件。QcolorDialog可以让用户选择对话框颜色,QFontDialog是字体对话框选择字体,QinputDialog可输入单行文字,整数,还有浮点数。QMeSSageBOX用于提示用户,它包含了提示对话框,确认对话框,警告用户对话框等。2 .框架QT框架部分就是涵盖了一些不可视的类和对象,也就是一些对象模型和抽象的控件,还有用于对图像绘画及拖动的外观控件。QObject就是对象模型,其是QT框架的基础,也是QT整体的核心类,它是QT对象的基类。它主要的功能就是提供了最特殊的机制-Singalslot机制。像绘画方面就是QBrUSh,简单的来说这个类就是一个基础性的图形对象,主要是用于填充一些简单的几何图形。而拖动拖放操作就是靠的QDragobjeCt类,它涵盖了鼠标移动的事件,可以进行一系列的拖动,放下操作。而颜色方面就是QCOIOr类,它是基于RGB字符来创建图像及文本色彩的。3 .工具QT工具指的是与DATE日期以及链表相关等数据结构,它和GUl有本质的区别甚至可以说是不相干的。最基础的工具就是我们常见的数据结构,其中就包括链表,队列和数组,以及堆栈等数据结构。工具所涵盖的类就有QArray,QimageIO,QFile,QDate等。分开来讲就是,QArray控制图像编码,QimageK)就是对图像像素级操作,QFile就是对文件操作。2.1.3 QT对象通讯机制QT的通讯机制可以简单的分为内部通讯和外部通讯,这个机制是非常关键的,它是对象程序开发设计的关键内容,能够很好的实现内外的信息资源的交互。QT的通讯机制是独特的,也就是(Signal-Slot)机制,也叫做信号槽机制,它与MFC处理时间的环节很类似,重点就是软件的消息映射和时间的循环。我们可以把SINAL就是信号比作事件,而SLOT就是我们事件触发的槽也就是槽函数。这两者的链接靠的是ComleCt。这种独特的机制打破了传统,不再是复杂且容易崩溃的,而是非常简洁和高效。上面总结来说是QT内部的对象通信,下面我们分析下QT与外部设备的通讯,讲到这个就不得不提SoCket套接字,它能够将外部设备与QT应用程序紧紧相连,当QT应用程序启动时,程序会调用函数启动服务器,而服务器就会通过套接字与外部输入设备进行连接。连接成功后软件会进入事件循环中,事件处理程序会通过select函数来观察内部文件资源的变化及流动,并对套接字进行实时的监听。这里的文件资源变化就是对数据输出的体现。当事件处理结束后,应用程序会将事件反馈给外部设备,这就完成了QT与外部设备的通讯。2.2 编译调试工具简介1.GCC编译工具简介GCC也就是GNU编译器套件,它涵盖了多种编程语言,如C,C+÷,java,Objective-C等等,它还包括了许多语言的库。而我们所讲的GCC是GNU的编译器,这款编译器被很多UNIX类操作系统所使用,如LlNUX和MACOSX等,它们都把它作为标准的编译器,当然我们在WlNDoW系统也可以使用它,它是一款非常自由的软件。基本用法如下所示:说到用法我们先要理解GCC的编译过程:预处理:这里编译器会做很多操作,如删除define定义,讲所有的宏定义展开,删除所有开发人员的注释等,这里最重要的操作就是对炳nclude的处理,这是预编译指令,这里会将不断递归查找文件内的h文件,生成.i文件编译:这个步骤会对代码进行扫描,对语义和语法的分析,将程序源代码优化,然后生成目标代码.s文件。汇编:这里汇编器将.3汇编代码编译成机器语言指令,生成目标o文件链接:链接器将程序所用的库函数进行相连接,生成可执行文件。而这里就涉及到了GCC编译器的用法没步操作的指令都是不一样的下面就编译器的基本用法:一步到位的写法:gccXxx.c-OXXX独立进行分布编译就是:gcc-Exxx.c-OXXX.i-E:对代码进行预处理gcc-Sxxx.i-Oxxx.s-S:对源代码进行预处理并且编译gcc-CXXX.S-0XXX.0-C:不做链接的编译gccXXX.0-0XXX2.GDB调试工具简介GDB是Iinux内的程序调试工具,它好比与WINDOW下的IDE,但是还是有很大的不同,WINDOW非常优秀且美观的图形界面,而GDB就不一样了,它是完全是由代码来执行的,那我们为什么要用GDB呢,因为它足够的强大,它的命令行模式非常的自由,而且快捷,而IDE启动往往是非常的缓慢,这也是因为GDB它所占用的资源非常的少,并且免费以及是开源的。第3章可行性分析该项目研究的可行性分析将从经济可行性,和技术可行性以及操作可行性等方面进行可行性分析。3.1 经济可行性该项目用的开发软件及工具都是开源且免费的,所以自身在项目开发时所投入的成本很低,无非最多的就是投入自身的时间和经历,除去这些该项目的开发损耗可以忽略,而这款软件或许能够降低企业的成本,增强企业员工的工作效率,因此该项目在经济方面是可行的。3.2 技术可行性现阶段网络科技的发展已经很成熟了,在技术方面,早在九几年就有技术大神对此类项目进行研究和开发,所以站在巨人的肩膀上会非常的轻松。尤其是该项目所使用的语言C/C+是非常成熟的语言,完全可以满足项目软件的开发,而计算机系统方面,也是能够支持软件的运行。数据库方面,我们所用到的SQListe也是非常便捷的,所以在技术方面也是可行的。3.3 操作可行性操作可行性主要就是指的用户使用软件的舒适程度,其包含着上手的难易程度,以及灵活性,如何使得软件操作灵活,便于后期的扩张与开发和可视性的实现都是标准。而随着社会发展,计算机的普及,一般有过大学教育的人都能熟练操作计算机,因此,在这种意义上,开发本系统也是可行的。3.4 法律方面可行性分析项目软件由我个人所完成,是尊守法律规定的情况下,自主的进行项Fl的研究和开发,所以是不可能有侵犯他人权利的行为。因此该网站从法律上来说是可行的。通过上述的四大可行性分析,我们这款聊天软件系统是不管在经济方面还是技术开发的方面上都是可行的。第4章需求分析4.1 需求分析4.1.1 功能需求分析本局域网聊天室需要完成如下功能:(1)软件的最基本功能就是用户之间的信息传递。(2)用户使用客户端进行文件传输,会先通过服务器的链接转发来实现文件的传输功能。(3)实时的显示用户主机列表即好友列表。及时实现在线用户主机的检查更新和维护。(4)在C/S模式中,客户端和服务器是相互分不开的。如果客户端启用后,首先查看服务端是否在线,如果在线则客户端进行顺利登录,如果不在线,提示登陆失败,点击确认退出登陆的客户端。在聊天的过程中,服务端会一直进行监听确认是否有客户端退出系统;如果监听不到某一个客户端的CS,则认为服务器己经下线,就需要提示用户并建议其退出,一段时间后如果客户端没有响应,则自动退出。4.1.2 性能需求分析1 .数据精确度输入数据长度适中,类型准确。2 .时间特性当用户发送消息或文件时,系统能够及时进行相应。3 .适用性聊天软件可在LINUX或者WINWS平台使用,本次主要是针对WlNDOWS用户开发。4 .故障处理性本系统采用的SQLite数据库具备完整的数据备份与还原功能,可对数据的丢失进行及时的处理,而且可以通过查看数据库的日志,无论系统何时、何地出现故障都便于查找。4.2 系统用例分析使用UML所提供的用例图可以很好的分析用户的需求,方便自己做需求分析,其非常强调系统的完整性,对开发人员开发系统时帮助很大,有利于系统开发的完整。用例图图符如下表4-1所示:表4-1用例图图符可视化图符名称描述系统系统边界,用例放其中用例用例图中的用例描述与系统功能有关的外部实执行者体,可以是用户,也可以是外部系统关联连接执行者和用例用户发送信息,及用户接收服务器转发信息的功能用例图如下:信息功能用例:在线用户图4-1文字消息功能用例图用户的发送文件,服务器接受文件,用户拒绝文件传输的功能用例图如下:文件传输功能用例图:图4-2文件传输功能用例图4.3 类与对象模型类与对象的分析时,主要是主重结构以及功能上的理解,要定义好成员属性创建好功能模块。类与对象模型如图4-3所示。图4-3聊天软件类与对象模型图第5章系统设计系统设计就是系统性的分析结果,这个过程是非常抽象的。主要的任务就是结合用户所反馈的需求进行逻辑性质的方案转换,要利用系统科学的思想去设计最为满足客户需求的草案,为下一个阶段打好基础,对项目的实施提供了多方面的数据反馈。5.1 总体结构根据聊天室管理系统的需求及总体的设计,本系统采用QT技术,采用的是C/S结构。本系统的总体结构图如下图5-1所示:图5-1系统总体结构图5.2 系统流程设计5.2.1 事件跟踪图设计用户通过客户端,打开聊天窗口,可发送语音聊天请求,对方可以接受或者拒绝聊天请求。用户也可发送文件,聊天信息,随后可自行关闭窗口结束聊天。事件跟踪图如图5-2所示:&户单火山 XWgk 热先递 硝箱公 证合大 母出国41*L发出由A力我MUMft« 山.,,”大图5-2事件跟踪图5.2.2状态图设计用户登录时将经过服务器的身份验证,通过数据表合适信息,失败的话显示错误信息,然后退出,成功即可发起聊天。状态图如图5-3所示:图5-3状态图5.2.3系统数据流图设计数据流图它能够真实的描述出软件数据的输入和输出,它是一种非常强有力的逻辑模型。先将信息传输的数据流程图分为O层数据流图和1层数据流图。O层数据流图如图5-4所示:文本、语音、文件传输局域网谱聊天用户书聊天系统文木文件传输图5-4顶层数据流图系统的顶层至少初略的概括了系统内外部数据传输的状况,为了更清晰地表达数据加工过程,进一步对它进行细化,从而得到1层数据流图,如图5-5所示:聊天用户一!聊天用户I,.H牌犬日II客户端很务器端图5-5聊天一层数据流程图一层数据流对服务器数据处理并不清晰,为了更好的服务器的数据控制和处理,制作了聊天软件二层数据流程图,来展示服务器处理用户信息传递,如发送图片,发送文件等,如图5-6所示。加用户将家客户酒如期用六,服务器药儡山M终三S文本f图5-6局域网语音聊天二层数据流程图建立用于存储用户地址信息的用户表,以便服务器识别主机信息;表57用户表序号字段名称数据类型备注1hostName用户主机名称varchar(50)主键2HostAddress主机地址varchar(50)非空3macAddress主机硬件地址varchar(50)非空4UserName登录名varchar(50)可空5remark个人描述信息varchar(50)非空建立存储用户消息信息表,用于服务器消息的转发:表5-2消息信息表序号字段名称数据类型备注1idIDint主键,非空2UserName用户名varchar(50)非空3hostName主机名varchar(50)非空4HostAddress主机地址varchar(50)非空5macAddress主机硬件地址varchar(50)非空6IocalUserNanie当前用户名varchar(50)非空7IocalHostNanie当前主机名varchar(50)非空8IocalHostAddreSS当前主机地址varchar(50)非空9IocalMacAddresS当前主机硬件地址varchar(50)非空10type类型varchar(50)非空11messageType消息类型varchar(50)非空12messageText消息内容varchar(500)非空13SendTime发送时间datetime非空14receiveTimo接收时间datetime非空建立用于存储用户发送消息报文表:表5-3消息报文表序号字段名称数据类型备注1seq包序号long主键,非空2UserName用户名varchar(50)非空3hostName主机名varchar(50)非空4head消息头varchar(100)非空5data消息正文text非空第6章系统实现6.1系统主界面模块软件的主界面就是显示出用户的在线情况,让用户可以清晰的观察好友的在线情况,以及用户的好友分类情况。系统主界面如所示6T所示。我的好友我的同学9)我的家人(0)陌生人9),黑名单(0)系统主界面的实现代码如下:dialog_VVidget:dialog_Widget(QStringLocalHostName,QStringIp,QStringmes,QWidget*parent):QWidget(parent),ui(newUi二dialog_Widget)ui->setupUi(this);this->setWindowlcon(QIcon(,'mgqq.icon);QPalettepalette_main;palette-main.setBrush(QPaletteBackground,QBrush(QPixmap(',imgblue-BGjpg,');this->setPalette(palette_main);this->setAutoFi11Background(true);SetwindowFlags(QciFramelessWindowHint);QBitmapbmp(this->size();bmp.fill();QPainterp(<fcbmp);/1p.setPen(Qt:NoPen);/p.setBrush(Qt:black);P-SetRenderHint(QPainterziAntialiasing);抗锯齿/p.drawRoundedRect(bmp.rect(),20,20);/四个角都是圆弧只要上边角圆弧intarcR=10;/弧度QRectrect=this->rect();QPainterPathpath;逆时针path.moveTo(arcR,0);path.arcTo(0,0,arcR*2,arcR*2,90.0f,90.0f);path.lineTo(0,rect.height);path.lineTo(rect.width),rect.height();path.lineTo(rect.width(),arcR);path.arcTo(rect.width()-arcR*2,0,arcR*2,arcR*2,0.0f,90.0f);path.lineTo(arcR,0);p.drawPath(path);p.filIPath(path,QBrush(Qt:red);/arm和windows平台没有这行代码将显示一个透明的空空的框setMask(bmp);=二二二一一=实现上边角圆弧=二_/this->resize(500,500);/this->setFixedSize(535,530);/this->setWindowFlags(Qt:iFramelessWindowHint);ui->toolW->setFixedHeight(40);QPalettepalette;palette.setBrush(QPalette:Window,QBrush(QColor(250,255,240,150);ui->dialog-W->setPalette(palette);ui->dialog-W->setAutoFillBackground(true);lP_addr=Ip;user_name=LocalHostName;/qDebug()<<"IPdialog<<lp<<endl;TcpSocket=newQTcpSocket(this);TCPSerVer=newQTCPSerVer(this);/新的客户端和服务器ClientConnection=newQTepSocket();loading();QStringIcon_path=2imgn6.png"默认头像ui->Head_label->setPixmap(Icon_path);ui->Headlabel->setFixedSize(40,40);VersionText=newQLabel;VerSiOnTeXt,SetText(LocalHostName);力口载用户名btnMin=newSySBUttOne'sys_button_min.png",tr("最小化);connect(btnMin,SIGNAL(ClickedO),this,SLOT(showMin);btnMax=newSySBUtton("sys_button_max.png",tr("最大化);btnClose=newSySBUttc)n("sys_button_close.png",tr("关闭);connect(btnClose,SIGNAL(Clicked),this,SLOT(Close);UdpSocket=newQUdpSocket;if!UdpSocket->bind(public_port,QUdpSocket:ShareAddressQUdpSocket:ReuseAddressHint)QMessageBoxxritical(O,QString:fromUtf8(错误),QString:fromUtf8("本地端口连接错误”);exit(l);connect(UdpSocket,SIGNAL(readyReadO),this,SLOT(msg_recive();/UDP接受消息ui->mainLayout->addWidget(VersionText/*,0,Qt:AlignVCenter*/);versionText->setContentsMargins(0,0,0,0);ui->mainLayout->addStretch();ui->mainLayout->addWidget(btnMin);ui->mainLayout->addWidget(btnClose);ui->mainLayout->setSpacing(0);ui->mainLayout->setContentsMargins(0,0,0,0);QVBoxLayout*DG_mainLayout=newQVBoxLayout(Ihis);/DG-mainLayout->setContentsMargins(0,0,0,0);DG_mainLayout->addLayout(ui->mainLayout);DG_mainLayout->addWidget(ui->toolW);DG_mainLayout->addWidget(ui->dialog_W);TcpSocket->connectToHost(QHostAddress:LocalHost,45454);/连接对方作为服务器连接不上总是超时FUCK>换成本地连接之后出现connectionrefused/connect(TcpSocket,SIGNAL(readyRead(),this,SLOT(msg_recive();/监听服务端发送的数据消息由服务端发送?connect(ui->closeButton,SIGNAL(ClickedO),this,SLOT(cIose_button_slot);/两个按钮的信号槽局域网聊天室界面。在聊天室窗口用户可以发送、接收信息、保存聊天记录以及发送接收文件等,如图6-2所示。图6-2聊天室窗口实现代码如下:接收信息voiddialog_Widget:msg_recive()while(UdpSocket->hasPendingDatagrams)QByteArraydatagram;datagram.resize(UdpSocket->pendingDatagramSize();UdpSocket->readDatagram(datagram.data(),datagram.size();QDataStreamin(&datagram,QIODevice:ReadOnly);in.setVersion(QDataStream:Qt_4_6);QStringsize_name;QStringsize_msg;QStringsend_name;QStringsendJp;QStringsizejp;QStringmyjp=get_mylp();inttype;in>>type;switch(type)caseMessagein»size_name»size_msg»size_ip»send_name»send_ip;if(size_ip=my_ip)&&(send_ip=IP_addr)如果收到的信息里面包含的IP地址=我的IP地址就是说明发给我的,QStringtimeQDateTimeixurrentDateTime().toString(Mhh:mm:ss");ui->MSG_show->setTextColor(Qt:blue);ui->MSG-show->setCurrentFont(QFont(,TimesNewRoman",12);ui->MSG-show->append("H+send_name+M"+time);ui->MSG_show->append(size_msg);QSoundplayer(,Ezlmsg.wav");layer.play();break:caseShake;QSoundplayer(Ermsg.w