项目已在
https://github.com/wang-bin/qdevicewatcher 目前支持linux和
windows。一般只要用QDeviceWathcer的deviceAdded(const QString&)和deviceRemoved(const QString&)这两个信号就够了。
linux下是用netlink,Windows下参考qdrive项目
https://gitorious.org/qdrive/qdrive,
没有完全看懂,所以我的代码可能会有点
问题。但至少可以正常工作了。
之前windows下我的方法是继承QCoreApplication,重新实现QCoreApplication::winEventFilter(MSG* msg, long* result)。但是希望做成
QObject的子类,这样可以单独使用;也可以继承QWidget,重新实现QWidget::winEvent(MSG* msg, long* result),但是不想引入
GUI模块。最后很幸运地找到了qdrive这个项目,它还实现了mac和symbian平台,可能QCore获取windows消息的实现也是类似的方法。
qdrive的linux下实现方式是监视/etc/mtab,但是这要求系统会自动挂载设备,用netlink没这个要求,这个我对作者提出了。2.6一下的内核不支持netlink,倒是可以使用监视/etc/mtab,因为还没想到
其他办法。