QT开发中文网

qt中自動檢測libusb

在Qt中自动检测libusb可以通过以下步骤实现:

  1. 在.pro文件中添加libusb的依赖库。
LIBS += -lusb-1.0

这样会告诉Qt编译器链接libusb库。

  1. 创建一个类或者函数,用于检测和操作libusb设备。例如,创建一个名为UsbDeviceManager的类。
#include <QObject>
#include <libusb.h>

class UsbDeviceManager : public QObject
{
    Q_OBJECT

public:
    explicit UsbDeviceManager(QObject *parent = nullptr);

signals:
    void deviceConnected(int vendorId, int productId);
    void deviceDisconnected(int vendorId, int productId);

private slots:
    void handleDeviceEvent(libusb_device *device, libusb_hotplug_event event);

private:
    libusb_context *m_context;
};

在类中,我们使用了libusb的相关头文件,并定义了信号来通知设备连接和断开事件。还有一个私有槽函数handleDeviceEvent,用于处理设备事件。

  1. 在实现文件中实现UsbDeviceManager类。
#include "usbdm.h"

UsbDeviceManager::UsbDeviceManager(QObject *parent)
    : QObject(parent), m_context(nullptr)
{
    libusb_init(&m_context);
    
    // 注册热插拔事件回调函数
    libusb_hotplug_register_callback(
        m_context,
        LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED | LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT,
        LIBUSB_HOTPLUG_ENUMERATE,
        LIBUSB_HOTPLUG_MATCH_ANY,
        LIBUSB_HOTPLUG_MATCH_ANY,
        LIBUSB_HOTPLUG_MATCH_ANY,
        &UsbDeviceManager::handleDeviceEvent, // 回调函数
        this, // 回调参数
        nullptr);
}

void UsbDeviceManager::handleDeviceEvent(libusb_device *device, libusb_hotplug_event event)
{
    libusb_device_descriptor desc;
    libusb_get_device_descriptor(device, &desc);

    if (event == LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED) {
        emit deviceConnected(desc.idVendor, desc.idProduct);
    } else if (event == LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT) {
        emit deviceDisconnected(desc.idVendor, desc.idProduct);
    }
}

在构造函数中,我们初始化libusb上下文,并注册热插拔事件的回调函数。handleDeviceEvent函数会根据事件类型发射相应的信号。

  1. 在需要使用自动检测的地方创建一个UsbDeviceManager对象,并连接信号与槽。
UsbDeviceManager usbManager;

QObject::connect(&usbManager, &UsbDeviceManager::deviceConnected, [](int vendorId, int productId){
    qDebug() << "USB Device connected: Vendor ID" << vendorId << "Product ID" << productId;
});

QObject::connect(&usbManager, &UsbDeviceManager::deviceDisconnected, [](int vendorId, int productId){
    qDebug() << "USB Device disconnected: Vendor ID" << vendorId << "Product ID" << productId;
});

这样,当有设备连接或断开时,会触发对应的信号,并执行相关的槽函数。

请确保正确链接并部署libusb库文件,在运行Qt应用程序时可以找到和加载libusb动态库。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://qt.0voice.com/?id=12110

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?