XMPP 实践一 Qt 和 qxmpp 库

4 Comments

5. 选择用于编写 XMPP 客户端的工具

为了深入了解 XMPP 是否足够用于开发一个开放、功能丰富的即时聊天工具,我决定写一个 XMPP 的客户端聊天程序。服务端直接连接 Google Talk 服务器。客户端编程基于 C++/Qt 和 qxmpp 库。最终程序将可以使用 Gtalk 帐号登录,并与其他 Gtalk 用户通信。

用于编写 XMPP 客户端的工具如下:

  • Google Talk 服务器
  • Qt 编程框架和工具链
  • qxmpp 程序库

5.1 Google Talk (Gtalk) 服务器的优势

Google Talk 是 Google 公司于2005年8月24日推出的一款IP 电话及即时通讯的服务。Google Talk 使用开放的 XMPP 协议。得益于 XMPP 的开放性,使用 Google Talk 服务不一定要通过官方客户端。Google Talk用户端仅支持 Windows (2000、XP、Server 2003、7)。[13]

实际上从 Gtalk 发布开始,XMPP 才真正走入大众的视野。以 Google 公司为后盾,Gtalk 的服务器拥有安全和稳定的口碑。

此次编程实践不涉及服务端的编程,而是遵循 XMPP 协议,让自己编写的客户端与 Gtalk 服务器通信,通过 Gtalk 服务器转发客户端的数据包。不涉及服务端编程,也可以使我专注与客户端的功能和操作性的优化上。

5.2 Qt 编程框架简介

Qt (发音同cute) 是一个跨平台的C++应用程序开发框架,有时又被称为 C++ 部件工具箱。Qt 被用在 KDE 桌面环境、Opera、OPIE、VoxOx、谷歌 Earth、Skype 和 VirtualBox的 开发中。它是诺基亚 (Nokia) 的 Qt Development Frameworks 部门的产品。[14] More

如何向一个基于Qt的开源项目贡献翻译

No Comments

我毫无疑问是一个菜鸟,不过我是比较有上进心的菜鸟,一直希望有朝一日能成为说中的牛人。菜鸟不会自然而然的成为牛人,这需要一个锻炼的过程,在哪里可以找到锻炼呢?那就是参与开源项目的开发。三人行,必有我师,何况是开源项目。能开发一个软件,并且这个软件能让我看到,那这个人几乎可以肯定水平比我高。所谓近朱者赤,往牛人身边靠,能提升自己的能力。

但是现实中的开源项目的代码质量不是我这种没有经过锻炼的菜鸟可以涉足的,这里就出现一个矛盾:要想提高我的能力,我必须参加一个开源项目;要参加一个开源项目,我必须有相应的能力。那难道我这种菜鸟就没有参加开源项目的方法了?好在,能向开源项目贡献的并不只有代码,还有别的方面,比如bug报告、美工、翻译。经过我探索发现,其实参与一个开源项目门槛最低的是参与翻译。而且收获远远不止英语单词的积累,还可以学到以下内容:

  • 与开发者交流的礼义
  • 观摩一个开源软件开发的流程
  • 从易懂的角度阅读开源代码

我最近厚着脸皮,参加了 qtcreator 中文版的翻译,这让我学到了不少东西,远胜于自己闭门造车。

于是,我想记录一下我第一次参与开源项目翻译的心得,也为跟我一样想参与开源项目的人提供借鉴。

1. 使用 Qt Lingust

该部分仅适用于基于 Qt 开发的项目

Qt 是一个开源的应用程序开发框架(官网),基于 Qt 的开源软件有 KDE SC,SMplayer等。

Qt 为所有基于 Qt 开发的软件提供了一个翻译的解决方案,这包含了针对项目管理者,开发者和翻译人员的对应工具。这里只说翻译人员要用的工具 Qt Lingust。

Qt Lingust运行图

Qt Lingust 是一个图形界面的应用程序,翻译人员使用的时候并不需要拥有编程知识。(当然为了翻译得更准确,Qt 字符串里的 % 标记还是要会看的)。 More

warp a callback-base C library with qt signal-slot mechanism

No Comments

Sometime we need to call some funtion from C library, etc. libpcap, libnids. But these C library is base on callback mechanism, how to let it work with qt signal-slot mechanism?

After some search, I found a way to wrap a callback-base C library using QThread and C++ singleton class. (refer to a page on qtcentre.org)

for example, wrap libnids. Libnids is an implementation of an E-component of Network Intrusion Detection System. It use callback to pass network packet info.

To wrap this library using Qt signal, there are some points:

More