用Qt 4.4编写drcom的GUI (转)
时间:2010-09-20 来源:zz_yun
经过了一个小程序的练手,应该写点实用的东西了。学校里上网需要使用drcom客户端进行登录。虽然sourceforge有一个linux的drcom客户端的开源项目,但是这是一个基于命令行的程序,开始用起来不是很方便。
对drcom-1.4.7的分析:
drcom分为drcomc,drcomd和一个内核模块。没有看过linux内核的编程,内核模块直接略过。drcomd是这个程序的守护程序,负责接收drcomc发送过去的指令,并向服务器提交相应的指令。drcomc是客户端程序,通过命令行参数,向drcomc发送登录、注销和修改密码的指令。两者之间通过UNIX的进程间内部socket进行通信。
最早写drcom的GUI是针对drcom-1.3.7的,那时候自己电脑的内核还是2.6.22的,于是就根据那个版本的drcom写了一个实现drcomc功能的GUI。现在针对drcom-1.4.7的GUI,也仅仅实现了drcomc的功能,所以还不是很方便。但是相比较前面的版本,稍微多加了一点人性化的功能。
首先,加入了修改drcom.conf文件的功能,能够方便的在一个对话框中可视化的修改配置内容。因为drcom-1.4.7中,多加了一个device的选项,以前的mac选项都变成可选的了,但是对于自己修改过mac地址的人来说,mac选项还是必要的,否则drcomd将会使用从设备中读取到的mac地址来连接服务器。因此,通过Qt4的QNetworkInterface类,得到电脑上每一个网络设备的mac地址。
相关代码:foreach(QNetworkInterface interface, QNetworkInterface::allInterfaces())
{
NIC->addItem(interface.name());
}
使用QNetworkInterface的静态函数allInterfaces(),取得电脑上所有的网络设备(包括本地回路)。然后使用Qt的foreach宏,遍历整个列表,将每个设备名添加到NIC中(一个comboBox的对象)。
interface = QNetworkInterface::interfaceFromName(interfaceName);
if(interface.isValid())
{
localMAC->setText(tr("MAC地址:") + interface.hardwareAddress());
}
每次下拉框(comboBox)被改动之后,调用该函数,判断网络接口名是否正确,并读取该网络接口名的mac地址(hardwareAddress)。