日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux qt 获取u盘名称,QT windows平台下获取U盘 QComboBox显示U盘盘符

發布時間:2023/12/14 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux qt 获取u盘名称,QT windows平台下获取U盘 QComboBox显示U盘盘符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在windows平臺下獲取U盤信息,可以調用windows API函數比較方便。本來想用qt

來寫的,網上關于這方面的代碼比較多,但按照提示的步驟來寫的就是無法編譯,我也不知道為什么。如果有知道的朋友,留言給我或者qq 1585519210聯系

在windows平臺下U盤檢測采用windows事件來設計,廢話少說,上代碼!

#ifndef GETUSBDISKWIDGET_H

#define GETUSBDISKWIDGET_H

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

namespace Ui {

class GetUsbDiskWidget;

}

typedef struct USB_DISK_INFO

{

QString DirPath;

float TotalMemory;

float FreeMemory;

}USB_DISK_INFO;

class GetUsbDiskWidget : public QWidget

{

Q_OBJECT

public:

explicit GetUsbDiskWidget(QWidget *parent = 0);

~GetUsbDiskWidget();

void Init();

void ScanHD();

void AddDisk(QString &DiskName);

void DeleteDisk(QString &DiskName);

bool SearchDisk(QString &DiskName,int &iter);

void GetMemorySize(USB_DISK_INFO & disk);

void AddComboBoxItem(QString &item);

void DeleteComboBoxItem(QString &item);

bool winEvent(MSG *message, long *result);

char FirstDriveFromMask (ULONG unitmask);

USB_DISK_INFO GetCheckedDisk();

private:

Ui::GetUsbDiskWidget *ui;

QVector usb_disk_info;

USB_DISK_INFO CurrentUseDisk;

private slots:

void on_comboBox_USB_currentIndexChanged(QString );

};

#endif // GETUSBDISKWIDGET_H

#include "getusbdiskwidget.h"

#include "ui_getusbdiskwidget.h"

#include

GetUsbDiskWidget::GetUsbDiskWidget(QWidget *parent) :

QWidget(parent),

ui(new Ui::GetUsbDiskWidget)

{

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("gb18030"));

QTextCodec::setCodecForLocale(QTextCodec::codecForName("gb18030"));

QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));

ui->setupUi(this);

this->Init();

}

GetUsbDiskWidget::~GetUsbDiskWidget()

{

delete ui;

}

//=================================================================================

//系統初始化

//=================================================================================

void GetUsbDiskWidget::Init()

{

this->ScanHD();

ui->comboBox_USB->clear();

this->usb_disk_info.clear();

}

//=================================================================================

//系統啟動掃描已經連接的U盤 程序只會在系統執行時執行一次

//=================================================================================

void GetUsbDiskWidget::ScanHD()

{

qDebug()<

char diskPath[5] = { 0 };

DWORD allDisk = GetLogicalDrives(); //返回一個32位整數,將他轉換成二進制后,表示磁盤,最低位為A盤

if (allDisk!=0)

{

for (int i=0;i<13;i++) //假定最多有12個磁盤從A開始計數

{

if ((allDisk & 1)==1)

{

sprintf( diskPath, "%c", 'A'+i );

strcat( diskPath, ":" );

LPCWSTR RootPathName =(LPCWSTR)QString(diskPath).utf16();

if (GetDriveType(RootPathName) == DRIVE_REMOVABLE)

{

if( GetVolumeInformation(RootPathName,0,0,0,0,0,0,0) ) //判斷驅動是否準備就緒

{

qDebug()<

QString path(diskPath);

this->AddDisk(path);

}

}

}

allDisk = allDisk>>1;

}

}

}

//=================================================================================

//增加移動設備

//=================================================================================

void GetUsbDiskWidget::AddDisk(QString &DiskName)

{

int iter = 0;

if(SearchDisk(DiskName,iter))

{

return ;

}

USB_DISK_INFO usbtemp;

usbtemp.DirPath = DiskName;

GetMemorySize(usbtemp);//獲取設備內存信息

this->usb_disk_info.push_back(usbtemp);

this->AddComboBoxItem(DiskName);

}

//=================================================================================

//刪除移動設備

//=================================================================================

void GetUsbDiskWidget::DeleteDisk(QString &DiskName)

{

int iter = 0;

if(SearchDisk(DiskName,iter))

{

this->usb_disk_info.remove(iter);

this->DeleteComboBoxItem(DiskName);

}

}

//=================================================================================

//搜索移動設備

//=================================================================================

bool GetUsbDiskWidget::SearchDisk(QString &DiskName, int &iter)

{

for(int i = 0;i < this->usb_disk_info.size();i++)

{

if(usb_disk_info.at(i).DirPath.compare(DiskName) == 0)

{

iter = i;

return true;

}

}

return false;

}

//=================================================================================

//獲取設備的內存信息

//=================================================================================

void GetUsbDiskWidget::GetMemorySize(USB_DISK_INFO &disk)

{

ULARGE_INTEGER liFreeBytesAvailable, liTotalBytes, liTotalFreeBytes;

LPCWSTR lpcwstrDriver=(LPCWSTR)disk.DirPath.utf16();

if( !GetDiskFreeSpaceEx( lpcwstrDriver, &liFreeBytesAvailable, &liTotalBytes, &liTotalFreeBytes) )

{

qDebug() << "ERROR: Call to GetDiskFreeSpaceEx() failed.";

return ;

}

disk.FreeMemory = (float)liTotalFreeBytes.QuadPart/1024/1024/1024; //剩余內存

disk.TotalMemory = (float)liTotalBytes.QuadPart/1024/1024/1024; //總內存

}

//=================================================================================

//過濾windows的U盤插入事件

//=================================================================================

bool GetUsbDiskWidget::winEvent(MSG *message, long *result)

{

QString DirPath;

int msgType = message->message;

if(msgType == WM_DEVICECHANGE)

{

qDebug()<< "winEvent in MgFrame : WM_DEVICECHANGE" ;

PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)message->lParam;

switch(message->wParam)

{

case DBT_DEVICEARRIVAL:

if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)

{

PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;

if (lpdbv -> dbcv_flags == 0)

{

//插入U盤,獲取盤符

DirPath = QString(this->FirstDriveFromMask(lpdbv ->dbcv_unitmask));

DirPath += ":";

this->AddDisk(DirPath);

qDebug()<USBDisk Path ="<

}

}

break;

case DBT_DEVICEREMOVECOMPLETE:

if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)

{

PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;

if (lpdbv -> dbcv_flags == 0)

{

qDebug() << "USB_Removed";

DirPath = QString(this->FirstDriveFromMask(lpdbv ->dbcv_unitmask));

DirPath += ":";

this->DeleteDisk(DirPath);

qDebug()<

}

}

break;

}

}

return false;

}

//=================================================================================

//U盤盤符計算

//=================================================================================

char GetUsbDiskWidget::FirstDriveFromMask(ULONG unitmask)

{

char i;

for (i = 0; i < 26; ++i)

{

if (unitmask & 0x1)

break;

unitmask = unitmask >> 1;

}

return (i + 'A');

}

//=================================================================================

//增加下拉列表選項

//=================================================================================

void GetUsbDiskWidget::AddComboBoxItem(QString &item)

{

QStringList ComboboxList = QStringList()<

//ComboboxList<

ui->comboBox_USB->addItems(ComboboxList);

}

//=================================================================================

//刪除下拉列表選項

//=================================================================================

void GetUsbDiskWidget::DeleteComboBoxItem(QString &item)

{

int i = ui->comboBox_USB->findText(item);

ui->comboBox_USB->removeItem(i);

}

//=================================================================================

//下拉列表選項發生改變

//=================================================================================

void GetUsbDiskWidget::on_comboBox_USB_currentIndexChanged(QString e)

{

qDebug()<

int iter;

if(this->SearchDisk(e,iter))

{

this->CurrentUseDisk = this->usb_disk_info.at(iter);

}

}

//=================================================================================

//獲取下拉列表當前選定的U盤

//=================================================================================

USB_DISK_INFO GetUsbDiskWidget::GetCheckedDisk()

{

return this->CurrentUseDisk;

}

#include

#include "getusbdiskwidget.h"

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

GetUsbDiskWidget w;

w.show();

return a.exec();

}

總結

以上是生活随笔為你收集整理的linux qt 获取u盘名称,QT windows平台下获取U盘 QComboBox显示U盘盘符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。