很多软件就是包装了命令行下面的软件。比如现在的uGet,就是包装了aria2。
请问这个是怎么包装的呢?比如我用QT,如何自己包装aria2?
怎么样把命令行软件包装成GUI软件?
- hikui
- 帖子: 460
- 注册时间: 2007-07-06 11:56
- 来自: 上海
- 联系:
- code vampire
- 帖子: 193
- 注册时间: 2010-06-19 12:50
- 系统: AIX、UBUNTU
- 联系:
Re: 怎么样把命令行软件包装成GUI软件?
CLI的软件大多靠命令选项控制,你可以研究软件源代码,也可以直接分析软件的命令选项,包装的GUI壳不过是系统调用,如标准C库的system,或Linux下的fork + exec,Windows下大体相同,都是新建一个进程,然后替换进程。
QT似乎没进程,所以只能是底层的操作系统调用,可能无法实现跨平台,其实QT如果要实现的话也是这么做,只不过把Windows下的调用和Linux下的调用封装的让你看不出差别。
至于如何传递参数,各种方法有不同的要求。至于GUI壳要做的,就是分析用户需求,配置命令选项,传字符串,最多建个文件什么的。也就这么多吧!
UNIX系统的一大特点就是程序小而精,如ls这些命令,grep这些命令,你都可以在你的程序中使用。Linux继承了这一优良特性,所以CLI程序的好处是很大的,几个小程序就可以组成复杂程序,而这些Windows程序员不懂,他们大多直接使用MFC或者微软的其他API,而这些东西更新太快,微软自己都在不断淘汰更别期望用他们跨平台,或者老程序在新机子使用了。Linux程序员的不同之处在于他们更喜欢直接使C/C++,一个优秀程序可以传好长时间。
如果你做开发的话也应该这样做,如QT,MFC这样的东西封装程度太高,都不是好东西,容易淘汰。正确的方法是用C/C++写基础程序,你的功力如果够的话跨平台不过是配库,换函数。如果想做GUI就拿QT或MFC做壳,这样你不必去关心QT,MFC这些带来的麻烦,只是简单的壳而已,不喜欢马上就可以再写一个。觉得不好看可以马上再写一个,而且比较安全。
QT似乎没进程,所以只能是底层的操作系统调用,可能无法实现跨平台,其实QT如果要实现的话也是这么做,只不过把Windows下的调用和Linux下的调用封装的让你看不出差别。
至于如何传递参数,各种方法有不同的要求。至于GUI壳要做的,就是分析用户需求,配置命令选项,传字符串,最多建个文件什么的。也就这么多吧!
UNIX系统的一大特点就是程序小而精,如ls这些命令,grep这些命令,你都可以在你的程序中使用。Linux继承了这一优良特性,所以CLI程序的好处是很大的,几个小程序就可以组成复杂程序,而这些Windows程序员不懂,他们大多直接使用MFC或者微软的其他API,而这些东西更新太快,微软自己都在不断淘汰更别期望用他们跨平台,或者老程序在新机子使用了。Linux程序员的不同之处在于他们更喜欢直接使C/C++,一个优秀程序可以传好长时间。
如果你做开发的话也应该这样做,如QT,MFC这样的东西封装程度太高,都不是好东西,容易淘汰。正确的方法是用C/C++写基础程序,你的功力如果够的话跨平台不过是配库,换函数。如果想做GUI就拿QT或MFC做壳,这样你不必去关心QT,MFC这些带来的麻烦,只是简单的壳而已,不喜欢马上就可以再写一个。觉得不好看可以马上再写一个,而且比较安全。
Keep it easy stupid !
I am Code Vampire .
I like Linux . I like open source .
- 懒蜗牛Gentoo
- 论坛版主
- 帖子: 7362
- 注册时间: 2007-03-02 17:36
- 系统: Linux Mint
Re: 怎么样把命令行软件包装成GUI软件?
最简单的方法就是gui软件调用系统命令
复杂一点的就研究下cli软件的源码,调用它提供的api
复杂一点的就研究下cli软件的源码,调用它提供的api
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
10.04新手入门——笨兔兔讲述自己的故事
- lainme
- 论坛版主
- 帖子: 7805
- 注册时间: 2008-09-13 19:17
- 系统: Arch Linux (x86_64)
- 联系:
Re: 怎么样把命令行软件包装成GUI软件?
aria2提供了xml-rpc控制接口。现有的uget等都是用xml-rpc的。QT的,我记得也有一个用aria2的下载器,叫karia2吧
- lexdene
- 帖子: 434
- 注册时间: 2010-02-21 16:19
- 来自: 大连
- 联系:
Re: 怎么样把命令行软件包装成GUI软件?
通过Qt的QProcess类产生一个系统调用,
通过系统调用来调用CLI命令。
通过系统调用来调用CLI命令。
大连Linux User Group: http://groups.google.com/group/dalian-lug?hl=zh-CN