以前写的一篇日志,不小心删了,竟然没得恢复。万恶的CSDN,重排版。

第一个写的软件。基本上还是很粗糙,而且代码也大多不是自己写的,不过也着实让我过了一把瘾。接下来简单地讲讲整个过程和学到的东西吧。

首先是软件的框架,自己主观地YY了很久,因为之前没有相关的经验,所以好多东西都一厢情愿地想当然了,以至于到真正动手的时候才恨不得一掌劈死自己。

(以下此段是自我YY,可跳过)我想像中的框架应该是首先有一个自定义类,暂且管它叫freeTalk类(实际上我也是这么命名的,汗),它主要负责完成局域网内在线用户列表的获取更新等。另外有一个类叫chat,用于用户间的即时通讯,也就是发发文字信息。还有一个类用于文件传输,它老人家叫transmission,传责完成文件的传输。

然后我就天真地开始工作了,首先是啃Qt的书,《C++ GUI Qt4编程》这本书还不错,虽然我到目前为止只看了几章。为了比较了解网络方面的协议什么的,还看了一些《UNIX网络编程 卷1》和计算机网络(结果发现没啥作用)。

先是在XP下安装Qt4,之前只有fedora16下面装过,都是用yum直接搞定的。。。这真是一个漫长的过程,被虐死了好几次。最后总结到的方法是:

1、下载mingw.rar,qt-win-opensource-4.8.4-mingw.exe和qt-creator-windows-opensource-2.7.1.exe,不要问我从哪里下的,因为我也忘了,还有这个是用Qt Creator集成开发环境进行开发的环境搭建,其他的像VS 2008、eclipse什么的请参考别的;

2、解压mingw.rar到D盘(当然也可以到别的盘,自己喜欢),安装qt-win-opensource-4.8.4-mingw.exe,过程中指定mingw文件夹,安装qt-creator-windows-opensource-2.7.1.exe;

3、打开Qt Creator,找到工具->选项,配置如下图所示:

4、配置环境变量(不知道是不是必要),我的电脑 》》属性 》》高级 》》环境变量 》》系统变量 》》Path,编辑,增加D:\Qt\bin\;D:\mingw\bin\(相对于安装目录而言),另外有一点值得注意的是,这货在windows下好像不能支持中文路径,所以项目不要创建在中文路径下,不然会出错。

然后可以开始了,创建项目,添加文件等等东西就不说了。总的来说实际做出来的东西分4个类,一个主窗口freeTalk类,一个聊天窗口chat类,一个tcpClient类,一个tcpServer类,像我YY的结果,不过文件传输被拆成了两半。实际的效果图如下所示:

整个过程中我觉得比较有意思的几个地方是:

1、要怎么实现按下Enter按键发送信息呢?一开始我觉得只要把sendButton的设置autoDefault属性即可,不过没成功,我想了一下可能的原因是焦点设在了textEdit上,没有求证过,原谅我这个初学者吧,后来还找到一个办法,就是用textChange信号来捕捉‘\n’换行符,然后直接调用on_sendButton_clicked()槽(原来槽还可以直接调用),不过这种方法缺点是会连‘\n’一起在内容被发送显示。所以最后找到了一个方案,如下:

boolchat::eventFilter(QObject*target,QEvent*event)

{

if(target==inputEdit)

{

if(event->type()==QEvent::KeyPress)

{

QKeyEvent*k=static_cast<QKeyEvent*>(event);

if(k->key()==Qt::Key_Return)

{

on_sendButton_clicked();

returntrue;

}

}

}

returnQWidget::eventFilter(target,event);

}

用一个事件过滤器,来捕获键盘输入事件,圆满解决。

2、对于要使用到的图片什么的,要先载入资源文件中,背景图片可以jpg格式的,作为一些控件的图标需要是png格式的。还有应用程序的图标是ico格式的,设置应用程序图标的步骤如下:

首先准备个ICO图标。例如:myappico.ico;用记事本新建个文件,里面就写一行:IDI_ICON1          ICON   DISCARDABLE   "myappico.ico"

保存改名为 myapp.rc并把它和你的图标myappico.ico一起复制到你的QT工程项目的目录。用记事本打开你的QT工程文件(如 "myapp.pro" ),在里面最后新添一行:RC_FILE = myapp.rc

3、每次创建聊天窗口之后,假如用close()关闭,因为chat是作为freeTalk的子窗口,所以实际上该部分内存还没有释放的,窗口只是隐藏了起来,只有等父窗口退出后才会释放。以下是从Qt Creator帮助中看到的一段:First it sends the widget a QCloseEvent.The widget is hidden if it accepts the close event. If it ignores the event,nothing happens. 当然也有可能是我误解了,毕竟我只是个菜鸟。所以为了保险起见,我每次都特地捕获这个事件,然后显式释放掉内存;

4、比起在构造函数中设置背景图片,在Qt Designer里用修改样式表来得更好一些,因为就填充来说,假如用了圆角控件的话,前者可能会出现填充不完整的现象,不过这只是个人的使用经验而已;

5、关于字体的事一直没弄明白,总是显示乱码,最后用一句:

QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));

就好了,windows不是说好的用GB2312的吗,节操呢?

6、关于发布,静态编译各说各话,都不知道该相信谁了,最后没辄,弄个动态编译,于是就拖家带口200多个M的dll文件一起吧,相对于静态编译的麻烦来说我还是不介意的。值得说一下的是VS2008有个工具叫depends的软件还挺好用的,可以用来检测依赖关系,看看到底需要哪些动态链接库,再包含到工程目录下就行了。

大概就这么多吧,其他有一些遇到的问题都忘了,毕竟是三个星期前做的东西,下次要及时点做个总结才行。

基于Qt的局域网即时通讯软件相关推荐

  1. 为什么企业选择局域网即时通讯软件?局域网即时通讯软件哪家好?

    在当今互联网普及的时代,企业内部的沟通对企业管理有着非常重要的意义,即时通讯软件已成为企业工作中广泛采用的沟通工具. 然而,随着企业内部敏感信息通过互联网泄露的频繁发生,例如在工作期间,企业员工自发地 ...

  2. 局域网即时通讯软件java_如何选择企业即时通讯软件?

    企业即时通讯工具是一种面向企业终端使用者的网络沟通工具服务,交流内容包括文字.界面.语音.视频及文件互发等.相对于个人即时通讯工具而言,企业即时通讯工具因为剔除了娱乐等因素,所以更加强调实用性.安全性 ...

  3. 基于Qt的局域网即时通信系统设计与实现(提供各种版本的源代码)

    我创建了一个QQ群,有问题的话,可以直接加群:530240681. github上项目的链接:https://github.com/siyueshiqi/LAN_IM 本系统主要实现了注册登录.好友管 ...

  4. java xmpp协议_GitHub - zhengzhi530/xmpp: 基于Xmpp协议的即时通讯社交软件(客户端+服务端)...

    yyquan 开源一个自己去年写的基于Xmpp协议的即时通讯社交软件 (客户端+服务端) 本项目仅供参考,对于正在学习Xmpp以及javaweb后台的同学,可以看一下. 做这个项目纯属个人兴趣爱好,所 ...

  5. 如何选择企业即时通讯软件

    如何选择适合的企业即时通讯软件     目前来说,越来越多的大中型企业意识到上班时间使用个人通讯工具(IM)存在的危害(如:交流对象及交流内容的不可控.必须开通外网存在安全隐患等),并且已经开始寻求一 ...

  6. 企业即时通讯软件FreeEIM飞鸽传书

    企业即时通讯软件FreeEIM飞鸽传书,是一款基于TCP/IP协议.基于局域网广播消息模式的通讯软件,适合企业或政府部门局域网内部使用. 飞鸽传书用户可在企业内部或外部通过该软件进行工作上的交流,软件 ...

  7. WorkPlus即时通讯软件,专注于企业信息安全可靠的企业IM

    随着时代的进步,即时通讯技术已经逐渐被更多企业所接受,但在市场中,有些人打着"免费"旗号,却在进行违规操作.很多企业在采购即时通讯工具时都会选择价格便宜的,但这些即时聊天工具往往存 ...

  8. 即时通讯软件,专注于企业信息安全可靠的企业IM

    随着时代的进步,即时通讯技术已经逐渐被更多企业所接受,但在市场中,有些人打着"免费"旗号,却在进行违规操作.很多企业在采购即时通讯工具时都会选择价格便宜的,但这些即时聊天工具往往存 ...

  9. 基于Linux下的即时通讯聊天室项目(全代码 有注释 可直接运行)

    基于Linux下的即时通讯聊天室项目 一.序言 二.具体功能 三.系统客户要求 四.具体代码 1.服务器代码 2.客户端代码 一.序言 最近在写一个基于Linux下的聊天工具 它适合于局域网内所有人进 ...

  10. 企业即时通讯软件,网络通讯协议和机制怎么选?

    一个大型组织如果需要从头开发一套自主可控的即时通讯软件,从技术角度第一个要考虑的核心问题就是:如何确定客户端和服务器之间的通讯协议和通讯机制? 通讯协议怎么选? 大型组织架构就意味着员工人数多,网络情 ...

最新文章

  1. 前端 重构时需要注意的事项_驾驶式扫地车的功能特点和使用时需要注意事项...
  2. c语言里的多参数吗,C语言中不定参数的实现
  3. genrsa out php,PHP进行RSA加密解密
  4. Windows下将MySQL5.5升级为MySQL5.7
  5. libjingle源码解析(4)-【PseudoTcp】建立UDP之上的TCP(2):对交互数据流的处理
  6. 如何在一分钟内实现微服务系统下的架构可视化
  7. maven安装的详细步骤
  8. oracle从子表取出前几行数据:
  9. 微信小游戏排行榜设计技术梳理
  10. SNS大负载系统解决方案研究
  11. html类似京东侧边栏,JS实现京东商品分类侧边栏
  12. PHP与MySQL交互实现网页登录注册功能(步骤超详细!!!)
  13. java计算机毕业设计个人交友网站源码+数据库+系统+lw文档+mybatis+运行部署
  14. 这几个方法让你实现EXCEL文件翻译成中文
  15. 问题 E: 1.10 旅行时间  根据火车的出发时间和到达时间,编写程序计算整个旅途所用的时间。
  16. 5个人站队,每个人不在原位置有多少种站法
  17. 数据结构-矩阵-三角矩阵(Java语言)
  18. 2016年8月29日 星期一 --出埃及记 Exodus 16:30
  19. 视频教程-ShardingSphere:SpringBoot2+MybatisPlus+读写分离+分库分表-Java
  20. snakeyaml 简介、中文文档、中英对照文档 下载

热门文章

  1. 音视频开发之Android端native层播放音频三种方式
  2. 韦达圆周率c语言,韦达对圆周率的表达式 – 手机爱问
  3. 超实用的自我规划模型 | 进击
  4. printf如何按二进制格式打印
  5. window10设置系统还原点和使用还原点还原系统
  6. B站笔试真题之[编程题]脸滚键盘
  7. 四象限运行模式_四象限变频器原理及系统构成
  8. python生成扑克牌并实现比较大小玩法
  9. 保姆级教程 树莓派4b ubuntu20.04 的 linux 之旅
  10. Java学习笔记(9)-StringBuilder类二