已经找到解决方法,下面只描述最主要的部分,其他部分不是难题,问题主要在于怎么样发现U盘的插入与拨出,使用qt自带的QDBus可以实现,下面为连接代码,当系统有设备插入时,可以调用slotDeviceAdded(QString udi)函数。
在pro文件中应该加入
QT +=dbus
复制代码
1. #include <QtDBus/QDBusConnection>
2. //以下为检测设备的插入
3. QDBusConnection::systemBus().connect( "org.freedesktop.Hal",
4. "/org/freedesktop/Hal/Manager",
5. "org.freedesktop.Hal.Manager",
6. "DeviceAdded",
7. this,
8. SLOT(slotDeviceAdded(QString )));
9. //以下为检查设备的拨出
10. QDBusConnection::systemBus().connect( "org.freedesktop.Hal",
11. "/org/freedesktop/Hal/Manager",
12. "org.freedesktop.Hal.Manager",
13. "DeviceRemoved",
14. this,
15. SLOT(slotDeviceRemoved(QString )));
在slotDeviceAdded(QString udi)函数中,要使用到
复制代码
1. QDBusInterface device("org.freedesktop.Hal", udi, "org.freedesktop.Hal.Device" , QDBusConnection::systemBus());
通过HAL可以查询到设备为volume的设备,然后通过判断是否为/dev/sd*的设备,就可以判断出是否为U盘,然后调用mount就可以了。
这时记录下U盘的UDI,在检测到设备拨出时,再查询一下U盘的UDI是否还在,就知道U盘是否被拨出了。