[Linux锐捷认证]重复造轮子,用Qt写的MentoHust图形前端
Tofloor
poster avatar
zhtengw
deepin
2012-11-01 08:50
Author
2012.12.16
做了一个原生64位的deb包,欢迎下载测试!!

2012.12.10
做了deb、rpm、slackware和解压即用的二进制包。
warmth1.png
warmth2.png

各位,我创建了一个开源项目,用Qt写了一个MentoHust的图形界面,取名叫WarMtH,现在已经发布了1.0版本,项目主页http://code.google.com/p/warmth ,代码托管到http://gitcafe.com/zhtengw/WarMtH 有兴趣的朋友不妨去看看。

    可我为什么要重复造这个轮子呢~

    起因,以前Google过图形MentoHust,无果。后来偶然在deepin的博客中发现了birl,gtk写的,试用后发现总有些不对劲,还不如直接用 MentoHust。于是我动了自己写一个的念头,但因为没空,而且自己也缺乏相应的技术知识,就没有动手。

    导火索,在宿舍,一般是我的电脑用作无线 AP,连上锐捷,他们连我的无线网。就在三个星期前,10月9日,我不在宿舍,可能无线有什么问题了,他们连不上网,就想在我那退了锐捷给他们上,可惜他们无从下手,便直接拔了我的网线~ 于是,第二天,我便决定,写一个图形前端,使不会用Linux的人也可以知道怎样认证校园网,然后我就可以安心外出那啥了XD~

    一开始,我想就直接写一个shell script,利用 kdialog或zenity作窗口交互,毕竟我只是学了一学 期JAVA,会用fortran写写物理程序,简单接触过 c,没学过c++,不懂Python,没学过算法没学过计算机基础~但我又转念一想,为何不趁此学学新东西呢。鉴于gtk程序已有,而qt又比较容易学,我就果断装上qt-creator开始了。 我先是在网上找了几个qt的入门教程,通读一 下,照着例子做了一些基本的界面,熟悉熟悉 c++语言和qt的函数。然后去图书馆借了一本 c++的书,读了函数、指针、类几章,大约理解了那些代码的意义,接着,我便上路了。 学着例子,改几个组件,很快就做出了第一个界面,也就是用户名密码的输入界面。然后便是解决调用MentoHust的问题,一通搜索(这以后每遇到一个问题,我都是这样,百度搜qt+中文功能,Google和qt帮助搜qt+英文功能,三者结合),用上了叫qprocess的类,并将用户名和密码作为参数传递,成功认证!对我来说,这真的是一个里程碑。

我对这个frontend的设想是,主界面为用户名密码输入框,有认证按钮和配置按钮。点击认证会隐藏主窗口,然后弹出认证信息窗,显示 MentoHust的终端输出,并可以最小化到托盘;点击配置可以弹出配置界面,能将配置作为参数传给MentoHust,并同时保存到配置文件。由于我没有系统地学习过计算机基础,所以只有对界面的主观设想,并没有良好的程序构思。在具体实现上就是,一有什么想法,查查资料,就动手去做。

     最初比较纠结的是,不同类的对象之间的交互, 以及信息窗口死活只有在kill掉MentoHust后才能有文字。我是将一个窗口定义为一个类的,可是在主窗口对象和信息窗口之间怎么交互纠结了好久。白驹过隙,在经过很多搜索都没得到有效的技术指导之后,我突然明白了,在我的自定义类中,将很多qt类的对象作为了成员,那么,我的自定义类也可以作为成员对象存在呀(是不是有人要笑我好笨了,^o^)。于是,我创建一个信息窗口的对象作为主窗口的私有成员,顺利完成了它们之间的交互。接着,在这篇文章[1]中发现有关缓冲的问题,下载了MentoHust的源码,给主函数中加了一 行:
  1. setvbuf(stdout, (char *)NULL, _IONBF, 0);
Copy the Code
禁用其全缓冲,成功编译,信息也乖乖地来到我的gui窗口里了,哇哦。接下来的事情就顺利很多了,主要是对qt和c++ 的理解稍微加深了一些,也比较会筛选相关信息了。

     不知不觉,我就渐渐实现了最初的设想,虽然在写的过程中仍时常冒出新想法,但我觉得是时候发一个版本了,于是我在GZLUG邮件列表里宣布了1.0版的发布。接着,我继续编写,慢慢去实现我新的想法,项目还在继续。

     本来,我是想将自己的代码合并到MentoHust中去的,但作者总没回复我,也就搁置了。
     鉴于个人水平、精力有限,程序中的很多实现显得简单低级,希望有合作者参与项目。
Reply Favorite View the author
All Replies
2 / 3
To page
zhtengw
deepin
2012-11-17 08:22
#21
请问作者 新版本依赖哪些东西?
如果是运行的话,原来MentoHust的依赖再加上qt(已测试过版本4.6.3和4.8.2)就行了,对于MentoHust的依赖我还没弄得很清楚,正在学习中。
我自己水平尚浅,欢迎你提出问题和建议,共同探讨研究
Reply View the author
FEI17
deepin
2012-11-17 20:34
#22
[quote]请问作者 新版本依赖哪些东西?
如果是运行的话,原来MentoHust的依赖再加上qt(已测试过版本4.6.3和4.8.2)就行了,对于MentoHust的依赖我还没弄得很清楚,正在学习中。
我自己水平尚浅,欢迎你提出问题和建议,共同探讨研究[/quote]

您好 我把相应的文件直接复制到opensuse下面结果无法认证
悲剧啊 不知道怎么回事
不过我重装了 无法再现了 抱歉啊
无法帮助你研究了
Reply View the author
zhtengw
deepin
2012-11-17 23:11
#23
您好 我把相应的文件直接复制到opensuse下面结果无法认证
悲剧啊 不知道怎么回事
不过我重装了 无法再现了 抱歉啊
无法帮助你研究了
没事没事,你现在在使用什么发行版,能够运行吗?
不知你对rpm打包了解多少,有没有兴趣帮我做做rpm包
Reply View the author
FEI17
deepin
2012-11-17 23:41
#24
[quote]

您好 我把相应的文件直接复制到opensuse下面结果无法认证
悲剧啊 不知道怎么回事
不过我重装了 无法再现了 抱歉啊
无法帮助你研究了
没事没事,你现在在使用什么发行版,能够运行吗?
不知你对rpm打包了解多少,有没有兴趣帮我做做rpm包[/quote]

说实话我对打包完全不懂
不过最近找工作忙 可能帮不了你
不过一后出了新版我会帮你测试的
Reply View the author
zhtengw
deepin
2012-11-17 23:59
#25
[quote][quote]

您好 我把相应的文件直接复制到opensuse下面结果无法认证
悲剧啊 不知道怎么回事
不过我重装了 无法再现了 抱歉啊
无法帮助你研究了
没事没事,你现在在使用什么发行版,能够运行吗?
不知你对rpm打包了解多少,有没有兴趣帮我做做rpm包[/quote]

说实话我对打包完全不懂
不过最近找工作忙 可能帮不了你
不过一后出了新版我会帮你测试的[/quote]
非常感谢!
那我还是自己试试rpm打包吧,我本身不是用deb系和rpm系的发行版,做的deb和rpm可能不是很符合规范,还是需要专用这类发行版的人来帮帮我的
Reply View the author
FEI17
deepin
2012-11-18 00:11
#26
您好 顺便问一下您用的是什么IDE?
Reply View the author
zhtengw
deepin
2012-11-18 00:14
#27
不过最近找工作忙 可能帮不了你
不过一后出了新版我会帮你测试的
嗯,我们形容找工作的和考研的人都是过着“猪狗不如的生活”,只有我这样保研的才过着“猪一样的生活”。祝你顺利找到好工作呀。
Reply View the author
zhtengw
deepin
2012-11-18 00:18
#28
您好 顺便问一下您用的是什么IDE?
一开始用的是qt-creator,以方便查看qt帮助,迁移到cmake以后,用kdevelop多一点了。
Reply View the author
FEI17
deepin
2012-11-18 00:22
#29
[quote]您好 顺便问一下您用的是什么IDE?
一开始用的是qt-creator,以方便查看qt帮助,迁移到cmake以后,用kdevelop多一点了。[/quote]

谢谢 我阅读一下你的源代码
看看能不能做出来其他一些可以通过图形界面简化操作的软件
Reply View the author
zhtengw
deepin
2012-11-18 00:34
#30
[quote][quote]您好 顺便问一下您用的是什么IDE?
一开始用的是qt-creator,以方便查看qt帮助,迁移到cmake以后,用kdevelop多一点了。[/quote]

谢谢 我阅读一下你的源代码
看看能不能做出来其他一些可以通过图形界面简化操作的软件[/quote]
我不是计算机科班出身,代码格式可能不大好,也缺乏注释,阅读起来应该会有些困难,遇到比较难理解的就直接问我吧。
如果能发现bug就更好了。
Reply View the author
FEI17
deepin
2012-11-18 01:15
#31
恩 好的
先谢谢你了
Reply View the author
zhtengw
deepin
2012-11-27 22:15
#32
做了一个rpm包,但我没有测试环境,有没有人用rpm系的呀,帮忙测试一下。

MentoHust的源码好难懂呀~~
Reply View the author
zhtengw
deepin
2012-12-10 09:27
#33
更新1.2.1版
从1.2版本到现在,实现功能和修复bug:
    1. 修复退出认证时并没有发送退出信号给服务器的bug
    2. 实现单实例,不会重复启动新窗口
    3. 修复认证消息窗口不定期出现很多空行的bug

现在已经做了有rpm、deb、slackware和发行版无关的二进制包,欢迎下载测试。

正在整合mentohust的代码,cmake的c和c++混合编译好难搞呀~~
Reply View the author
cxbii
deepin
2012-12-12 01:43
#34
更新1.2.1版
从1.2版本到现在,实现功能和修复bug:
    1. 修复退出认证时并没有发送退出信号给服务器的bug
    2. 实现单实例,不会重复启动新窗口
    3. 修复认证消息窗口不定期出现很多空行的bug

现在已经做了有rpm、deb、slackware和发行版无关的二进制包,欢迎下载测试。

正在整合mentohust的代码,cmake的c和c++混合编译好难搞呀~~
加油!
Reply View the author
zhtengw
deepin
2012-12-12 04:08
#35
[quote]更新1.2.1版
从1.2版本到现在,实现功能和修复bug:
    1. 修复退出认证时并没有发送退出信号给服务器的bug
    2. 实现单实例,不会重复启动新窗口
    3. 修复认证消息窗口不定期出现很多空行的bug

现在已经做了有rpm、deb、slackware和发行版无关的二进制包,欢迎下载测试。

正在整合mentohust的代码,cmake的c和c++混合编译好难搞呀~~
加油![/quote]
谢谢呀,小浣熊从家里回来啦,终于用电脑上了吧
Reply View the author
cxbii
deepin
2012-12-12 05:39
#36
[quote][quote]更新1.2.1版
从1.2版本到现在,实现功能和修复bug:
    1. 修复退出认证时并没有发送退出信号给服务器的bug
    2. 实现单实例,不会重复启动新窗口
    3. 修复认证消息窗口不定期出现很多空行的bug

现在已经做了有rpm、deb、slackware和发行版无关的二进制包,欢迎下载测试。

正在整合mentohust的代码,cmake的c和c++混合编译好难搞呀~~
加油![/quote]
谢谢呀,小浣熊从家里回来啦,终于用电脑上了吧 [/quote]
: 是的!真爽!
Reply View the author
FEI17
deepin
2012-12-13 21:50
#37
忙碌了大半个月 终于回到学校了 惨啊
Reply View the author
zhtengw
deepin
2012-12-13 23:12
#38
忙碌了大半个月 终于回到学校了 惨啊
Welcome back, take a rest
Reply View the author
zhtengw
deepin
2012-12-17 08:42
#39
做了一个原生64位的deb包,欢迎下载测试!!
Reply View the author
zhtengw
deepin
2012-12-21 07:21
#40
啦啦啦,终于编译成功了第一个整合版的程序,可以通过--no-gui参数来只运行命令行界面,自己庆贺一下,
Reply View the author
2 / 3
To page