libusb_Qt使用

本文介绍了如何在Qt项目中使用Libusb库,包括从GitHub下载库、在.pro文件中设置编译参数以及在C++代码中获取和操作USB设备的过程。

Libusb

libusb_github
在这里插入图片描述
建议直接下载库,编译好麻烦

QT调用

.pro文件添加:

win32: LIBS += -L$$PWD/LIB/libusb/x64/ -llibusb-1.0

.cpp调用即可

#include "LIB/libusb/libusb.h"
void class_name:
在 Windows 下使用 `libusb_set_debug()` 设置调试级别后,`libusb` 会输出调试信息到 `stderr`(标准错误输出)。但在 GUI 程序中(如 Qt),默认情况下你不会看到这些信息,因为 GUI 应用程序没有控制台输出。 下面是如何在 Qt Windows 程序中查看 `libusb_set_debug()` 输出信息的完整解决方案。 --- ### ✅ 解决方案一:将 `stderr` 重定向到文件 你可以将 `libusb` 的调试输出重定向到一个日志文件中,便于查看。 #### 示例代码: ```cpp #include <libusb-1.0/libusb.h> #include <QApplication> #include <QDebug> #include <QFile> #include <fcntl.h> #include <io.h> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 重定向 stderr 到文件 FILE* fp = freopen("libusb_debug.log", "w", stderr); if (!fp) { qDebug() << "Failed to redirect stderr"; } // 初始化 libusb libusb_context *ctx = nullptr; libusb_set_debug(NULL, 3); // 设置调试级别为 3(最高级别) int result = libusb_init(&ctx); if (result < 0) { qDebug() << "libusb_init failed"; return -1; } // 执行设备操作(示例) libusb_device **devs; ssize_t cnt = libusb_get_device_list(ctx, &devs); qDebug() << "Found" << cnt << "devices"; libusb_free_device_list(devs, 1); libusb_exit(ctx); if (fp) { fclose(fp); } return a.exec(); } ``` 运行后,你会在程序目录下找到 `libusb_debug.log` 文件,里面包含了 `libusb` 的详细调试输出。 --- ### ✅ 解决方案二:使用 `OutputDebugString`(适用于调试器) 如果你使用 Visual Studio 调试 Qt 程序,可以将 `stderr` 输出重定向到调试器的“输出”窗口。 #### 示例代码: ```cpp #include <windows.h> #include <io.h> #include <fcntl.h> #include <stdio.h> #include <QDebug> // 自定义 stderr 输出到 OutputDebugString int __cdecl debug_output(const char *fmt, ...) { va_list args; va_start(args, fmt); char buffer[1024]; vsnprintf(buffer, sizeof(buffer), fmt, args); OutputDebugStringA(buffer); va_end(args); return 0; } int main(int argc, char *argv[]) { QApplication a(argc, argv); // 替换 stderr 输出 setvbuf(stderr, nullptr, _IOLBF, 0); // 行缓冲 // 或者直接替换 stderr 的 FILE 结构 // 这里简单起见,我们只重定向输出函数 // 注意:完整替换 stderr 需要更复杂的操作(如 dup2) // 设置 libusb 调试输出 libusb_context *ctx = nullptr; libusb_set_debug(NULL, 3); libusb_init(&ctx); // 示例操作 libusb_device **devs; ssize_t cnt = libusb_get_device_list(ctx, &devs); qDebug() << "Found" << cnt << "devices"; libusb_free_device_list(devs, 1); libusb_exit(ctx); return a.exec(); } ``` 在 Visual Studio 的“输出”窗口中,你会看到类似如下信息: ``` libusb: debug [op_init] libusb v1.0.24.11096 libusb: debug [winusbdll_init] Windows version: 10.0.19041 ... ``` --- ### ✅ 解决方案三:在 Qt 控制台程序中查看输出 如果你使用的是 Qt **控制台应用程序**(`.pro` 中有 `QT -= gui`),你可以直接在命令行中看到 `libusb` 的调试输出。 #### `.pro` 文件: ```qmake QT += core TARGET = libusb_debug_test TEMPLATE = app SOURCES += main.cpp LIBS += -L$$PWD/lib -llibusb-1.0 INCLUDEPATH += $$PWD/include/libusb-1.0 ``` #### main.cpp: ```cpp #include <libusb-1.0/libusb.h> #include <QCoreApplication> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); libusb_context *ctx = nullptr; libusb_set_debug(NULL, 3); // 启用调试输出 int result = libusb_init(&ctx); if (result < 0) { qDebug() << "libusb_init failed"; return -1; } libusb_device **devs; ssize_t cnt = libusb_get_device_list(ctx, &devs); qDebug() << "Found" << cnt << "devices"; libusb_free_device_list(devs, 1); libusb_exit(ctx); return a.exec(); } ``` 编译后运行这个程序,你会在命令行窗口中看到完整的 `libusb` 调试信息。 --- ### ✅ 总结 | 方法 | 描述 | 适用场景 | |------|------|----------| | 重定向到文件 | 将调试信息写入日志文件 | 用于 GUI 应用或无控制台的环境 | | 使用 `OutputDebugString` | 输出到 Visual Studio 的调试窗口 | 用于调试器调试 | | 控制台程序直接输出 | 使用 Qt 控制台项目 | 适合开发阶段调试 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值