首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Qt 讀取 USB 存儲設備內容並顯示於 QTableWidget

     編輯:程式設計綜合問答

實現思路

Qt 本身不提供直接的 USB 設備操作 API,需結合平台特定方式:

  1. Linux:掛載 USB 後視為普通目錄,使用 QDir/QFileInfo 遍歷。
  2. Windows:透過 QStorageInfo::mountedVolumes() 獲取磁碟機,篩選可移動磁碟,再遍歷檔案系統。
  3. 跨平台:使用 QStorageInfo (Qt 5.4+) 統一獲取掛載點資訊。

核心代碼範例 (Qt 5/6)

#include <QStorageInfo>
#include <QFileInfo>
#include <QTableWidget>

void MainWindow::loadUsbContents()
{
    ui->tableWidget->setColumnCount(4);
    ui->tableWidget->setHorizontalHeaderLabels({"名稱", "大小", "類型", "修改時間"});
    
    foreach (const QStorageInfo &storage, QStorageInfo::mountedVolumes()) {
        if (storage.isValid() && storage.isReady() && 
            (storage.device().contains("usb", Qt::CaseInsensitive) || 
             storage.rootPath().contains("media") || 
             storage.rootPath().contains("mnt"))) 
        {
            QDir usbDir(storage.rootPath());
            QStringList filters;
            filters << "*.*" ; // 所有檔案
            usbDir.setNameFilters(filters);
            
            QFileInfoList list = usbDir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
            ui->tableWidget->setRowCount(list.size());
            
            for (int i = 0; i < list.size(); ++i) {
                const QFileInfo &fi = list[i];
                ui->tableWidget->setItem(i, 0, new QTableWidgetItem(fi.fileName()));
                ui->tableWidget->setItem(i, 1, new QTableWidgetItem(fi.isDir() ? "目錄" : 
                    QString::number(fi.size() / 1024) + " KB"));
                ui->tableWidget->setItem(i, 2, new QTableWidgetItem(fi.suffix().isEmpty() ? "目錄" : fi.suffix()));
                ui->tableWidget->setItem(i, 3, new QTableWidgetItem(fi.lastModified().toString("yyyy-MM-dd hh:mm")));
            }
            break; // 僅處理第一個 USB 設備,實際可列表讓用戶選擇
        }
    }
}

進階功能

  • 即時監控:使用 QFileSystemWatcher 監聽 USB 掛載/卸載事件。
  • 安全移除:Linux 下調用 umount,Windows 需呼叫 CM_Request_Device_Eject (SetupAPI)。
  • 權限處理:Linux 需確保用戶屬於 plugdev 群組或配置 udev 規則。

參考資源

完整 Demo 可參考:Qt 讀取 USB 內容並顯示於表格

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved