如何列出通过组合框挂载的/ dev / sda usb存储

时间:2019-01-30 16:51:47

标签: list qt combobox usb udev

我正在寻找插入USB存储路径的方法,该路径必须在组合框中显示(在我与qt creator(qt 5.9)设计的gui中)。我一直在寻找方法,但没有发现任何东西。我想要的是这样的:

https://catenarios2.files.wordpress.com/2012/11/002.jpg

您能帮我进行我的项目吗?如果您提供示例,我将不胜感激。

非常感谢

1 个答案:

答案 0 :(得分:0)

基本思想是相同的-您通过QProcess启动Linux工具并解析结果。下面是一个简单的草图:

#include <QCoreApplication>
#include <QProcess>
#include <QDebug>

#include <usb.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QProcess devList;
    devList.start("lsblk", QStringList() << "-o" << "KNAME");
    if (!devList.waitForStarted())
        return false;

    if (!devList.waitForFinished())
        return false;

    QString result = QString(devList.readAll());
    qDebug() << result;

    return a.exec();
}

您可以使用任何其他siutable命令(很容易找到它们),并应提高解析,当然,但通常它是完全一样的。

AFAIK,可以使用类似...的方法从/proc/mounts获取安装点。

#include <QCoreApplication>

#include <mntent.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    struct mntent *ent;
    FILE *aFile;

    aFile = setmntent("/proc/mounts", "r");
    if (aFile == NULL) {
      perror("setmntent");
      exit(1);
    }
    while (NULL != (ent = getmntent(aFile))) {
      printf("%s %s\n", ent->mnt_fsname, ent->mnt_dir);
    }
    endmntent(aFile);

    return a.exec();
}

优于cat启动或其他成才,也从一些片断取出并应该改进。 最后,如果你需要美元的设备信息,也可能是类似...

#include <QCoreApplication>

#include <usb.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    struct usb_bus *bus;
    struct usb_device *dev;
    usb_init();
    usb_find_busses();
    usb_find_devices();
    for (bus = usb_busses; bus; bus = bus->next)
    {
        for (dev = bus->devices; dev; dev = dev->next)
        {
            printf("Trying device %s/%s\n", bus->dirname, dev->filename);
            printf("\tID_VENDOR = 0x%04x\n", dev->descriptor.idVendor);
            printf("\tID_PRODUCT = 0x%04x\n", dev->descriptor.idProduct);
        }
    }

    return a.exec();
}

这需要sudo apt-get libusb-dev +与编译-lusb

问题上的Qt并不多,也可能没有更基本的“编码”解决方案,但希望这会推动您寻求适当的解决方案。