[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
1 / 3
To page
tuhaihe
deepin
2012-11-01 17:13
#1
Reply View the author
cxbii
deepin
2012-11-01 18:42
#2
加油/!
Reply View the author
tsuibin
deepin
2012-11-01 18:50
#3
正在测试
Reply View the author
tsuibin
deepin
2012-11-01 19:06
#4
注意一下程序里面的指针,在界面退出和析构的时候没有释放
程序结构还可以调整一下 ,程序里面不需要的代码可以移除
另外mentohust这是个啥程序,咋找不到源
:mrgreen:
Reply View the author
cxbii
deepin
2012-11-01 19:07
#5
注意一下程序里面的指针,在界面退出和析构的时候没有释放
程序结构还可以调整一下
:mrgreen:
你应该去帮忙下的啦
Reply View the author
zhtengw
deepin
2012-11-01 20:53
#6
注意一下程序里面的指针,在界面退出和析构的时候没有释放
程序结构还可以调整一下 ,程序里面不需要的代码可以移除
另外mentohust这是个啥程序,咋找不到源
:mrgreen:
感谢测试和意见,对于你指出的问题,我不是很理解,不是怪你说得不清楚哈,是我编程水平问题,我有时间再去看看c++的书哈,如果可以,你直接去改也行~
关于MentoHust,是一个校园网的认证客户端,兼容锐捷认证,在我的Google code主页有链接。
Reply View the author
2007robot
deepin
2012-11-04 08:04
#7
之前在Ubuntu 11.10上装的birl 装成功了,运行总是出错,这两天我试用一下你用QT写的图形前端软件,THS!
Reply View the author
FEI17
deepin
2012-11-06 02:05
#8
试了一下 大赞
Reply View the author
zhtengw
deepin
2012-11-06 10:13
#9
注意一下程序里面的指针,在界面退出和析构的时候没有释放
程序结构还可以调整一下 ,程序里面不需要的代码可以移除
另外mentohust这是个啥程序,咋找不到源
:mrgreen:
你好,我尝试在析构函数里删除指针,但遇到两个问题不能解决
1 析构函数中,只能删除类的成员的指针,对于在构造函数及其他函数中新定义的指针没法删除,它们会在其作用域结束后被自动释放吗
2 释放有些指针会导致段错误,我将其注释掉以便程序正常运行,但不知如何处理这个问题
还望你可以指点一下我,谢谢
Reply View the author
zhtengw
deepin
2012-11-06 10:14
#10
试了一下 大赞
感谢支持
Reply View the author
zhtengw
deepin
2012-11-06 10:16
#11
之前在Ubuntu 11.10上装的birl 装成功了,运行总是出错,这两天我试用一下你用QT写的图形前端软件,THS!
这个程序也还有问题,我发现了一些,但总有没发现的,如果用了有什么不满指出,请联系我,谢谢
Reply View the author
zhtengw
deepin
2012-11-06 18:55
#12
更新1.1版

    1. 清理代码,补充了析构函数内容
    2. 允许改变认证消息窗口样式,可为透明或是经典
    3. 增加了关于窗口
Reply View the author
FEI17
deepin
2012-11-06 20:32
#13
更新1.1版

    1. 清理代码,补充了析构函数内容
    2. 允许改变认证消息窗口样式,可为透明或是经典
    3. 增加了关于窗口

强烈建议软件中心收录
Reply View the author
cxbii
deepin
2012-11-06 21:06
#14
[quote]更新1.1版

    1. 清理代码,补充了析构函数内容
    2. 允许改变认证消息窗口样式,可为透明或是经典
    3. 增加了关于窗口

强烈建议软件中心收录[/quote]
新版软件中心会的
Reply View the author
tsuibin
deepin
2012-11-07 03:38
#15
[quote]注意一下程序里面的指针,在界面退出和析构的时候没有释放
程序结构还可以调整一下 ,程序里面不需要的代码可以移除
另外mentohust这是个啥程序,咋找不到源
:mrgreen:
你好,我尝试在析构函数里删除指针,但遇到两个问题不能解决
1 析构函数中,只能删除类的成员的指针,对于在构造函数及其他函数中新定义的指针没法删除,它们会在其作用域结束后被自动释放吗
2 释放有些指针会导致段错误,我将其注释掉以便程序正常运行,但不知如何处理这个问题
还望你可以指点一下我,谢谢[/quote]

1 弄个链表类数据结构把指针管理起来
2 原因有很多,比较有可能的:检查指针是否被修改 是否正在使用等
Reply View the author
zhtengw
deepin
2012-11-07 08:09
#16
1 弄个链表类数据结构把指针管理起来
2 原因有很多,比较有可能的:检查指针是否被修改 是否正在使用等
谢谢,我再去学学
Reply View the author
zhtengw
deepin
2012-11-07 20:01
#17
1 弄个链表类数据结构把指针管理起来
2 原因有很多,比较有可能的:检查指针是否被修改 是否正在使用等
突然想到,在新建Qt类的对象的时候,可以指定其parent,当parent释放的时候,它们也会销毁,这样处理应该更安全,我再去调试调试
Reply View the author
zhtengw
deepin
2012-11-10 10:16
#18
更新1.2版

   1. 清理代码,修复内存泄漏
   2. 主窗口微小变动
   3. 改用gettext处理本地化,修复关于窗口有些字串无法翻译的问题
   4. 迁移到cmake进行构建

感觉比较完善了,下一步是看看mentohust源码,试试能否更深度地整合
Reply View the author
cxbii
deepin
2012-11-10 20:51
#19
更新1.2版

   1. 清理代码,修复内存泄漏
   2. 主窗口微小变动
   3. 改用gettext处理本地化,修复关于窗口有些字串无法翻译的问题
   4. 迁移到cmake进行构建

感觉比较完善了,下一步是看看mentohust源码,试试能否更深度地整合
: 收录到百科才行啊!
Reply View the author
FEI17
deepin
2012-11-17 06:28
#20
请问作者 新版本依赖哪些东西?
Reply View the author
1 / 3
To page