我正在寻找插入USB存储路径的方法,该路径必须在组合框中显示(在我与qt creator(qt 5.9)设计的gui中)。我一直在寻找方法,但没有发现任何东西。我想要的是这样的:
https://catenarios2.files.wordpress.com/2012/11/002.jpg
您能帮我进行我的项目吗?如果您提供示例,我将不胜感激。
非常感谢
答案 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并不多,也可能没有更基本的“编码”解决方案,但希望这会推动您寻求适当的解决方案。