Russian Qt Forum

Qt => Вопросы новичков => Тема начата: billy4685 от Декабрь 21, 2015, 10:29



Название: Как средствами Qt узнать что была подключена или отключена флешка?
Отправлено: billy4685 от Декабрь 21, 2015, 10:29
Здравствуйте, господа форумчане. Уже пару дней мучаюсь по вопросу определения подключения и отключения флешки средствами Qt. Пока вот порывшись по форумам удалось написать подобную функцию с помощью WinAPI, которая определяет, что флешка подключена или отключена и определяет ее метку.
Код:
void state_usb_flash()
{
   QString path;

   HANDLE  hDevice = CreateFileA("\\\\.\\PhysicalDrive1" , 0, 0, 0, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);
   if(hDevice == INVALID_HANDLE_VALUE)
  {
      qDebug() << "\nhDevice - INVALID_HANDLE_VALUE";
  }
  else
 {
    qDebug() << "\n hDevice handle ok";
    qDebug() << " HANDLE: " << hDevice;

    int n;
    char dd[4];
    DWORD dr = GetLogicalDrives();

    for( int i = 0; i < 26; i++ )
    {
n = ((dr>>i)&0x00000001);
if( n == 1 )
{
 dd[0] =  char(65+i); dd[1] = ':'; dd[2] = '\\'; dd[3] = 0;

 path = QString("%1:\\").arg(dd[0]);

 int d;

 d = GetDriveType( path.toStdWString().c_str() );
 if( d == DRIVE_REMOVABLE )
 {
qDebug() << " Label-usb-flash: " << path << endl;
break;
 }
}
    }
  }
}
Но тут я определял наличие второго физического диска. Если он есть, определял его метку, и уже имея метку смотрел а не флешка ли это. Не совсем правильное решение, но мне оно подходит на данный момент. Также не могу пока понять по какому событию вызывать данную функцию, как поймать сам момент подключения или отключения флешки. Нашел вот здесь тему про nativeEvent: http://www.prog.org.ru/topic_25260_0.html . Может можно как-то подобным образом определить что была отключена или подключена флешка?


Название: Re: Как средствами Qt узнать что была подключена или отключена флешка?
Отправлено: supertux от Декабрь 21, 2015, 10:40
Попробуйте использовать LibUSBx. (домашняя страница http://libusbx.org/).
Пример:
https://fedorapeople.org/~jwrdegoede/libusb-reference/hotplug.html


Название: Re: Как средствами Qt узнать что была подключена или отключена флешка?
Отправлено: billy4685 от Декабрь 21, 2015, 11:26
Попробуйте использовать LibUSBx. (домашняя страница http://libusbx.org/).
Пример:
https://fedorapeople.org/~jwrdegoede/libusb-reference/hotplug.html
А LibUSBx многоплатформенная библиотека? А то мне на данный момент нужно чтобы мое приложение шло на Windows XP/7 и на QNX6.6, в дальнейшем может понадобится и для Linux подобных. Та функция, что я написал выше, только для винды походу.


Название: Re: Как средствами Qt узнать что была подключена или отключена флешка?
Отправлено: kuzulis от Декабрь 21, 2015, 11:36
Бррр... нет, средствами Qt нельзя, оно не комбайн какой-нить. Надо искать в гугле что-то готовое или писать самому.

В Qt есть только класс QStorageInfo, но ему начхать на то, что флешка это, жестний диск, SSD, сетевой диск или виртуальный носитель.


Название: Re: Как средствами Qt узнать что была подключена или отключена флешка?
Отправлено: billy4685 от Декабрь 21, 2015, 12:05
Бррр... нет, средствами Qt нельзя, оно не комбайн какой-нить. Надо искать в гугле что-то готовое или писать самому.

В Qt есть только класс QStorageInfo, но ему начхать на то, что флешка это, жестний диск, SSD, сетевой диск или виртуальный носитель.
Ясно, буду искать. Вот нашел статью: http://wiki.kucia.net/doku.php?id=projects:qtusb . Буду разбираться.


Название: Re: Как средствами Qt узнать что была подключена или отключена флешка?
Отправлено: supertux от Декабрь 21, 2015, 12:13
LibUSBx под linux и windows работает точно.


Название: Re: Как средствами Qt узнать что была подключена или отключена флешка?
Отправлено: billy4685 от Декабрь 21, 2015, 12:33
Бррр... нет, средствами Qt нельзя, оно не комбайн какой-нить. Надо искать в гугле что-то готовое или писать самому.

В Qt есть только класс QStorageInfo, но ему начхать на то, что флешка это, жестний диск, SSD, сетевой диск или виртуальный носитель.
У меня в Qt 5.3.2 вообще не находит класс QStorageInfo (не инклудится), хотя в справке находит его описание.


Название: Re: Как средствами Qt узнать что была подключена или отключена флешка?
Отправлено: supertux от Декабрь 21, 2015, 15:52
QStorageInfo присутствует в версиях 5.4+. Так на оффсайте написано.


Название: Re: Как средствами Qt узнать что была подключена или отключена флешка?
Отправлено: billy4685 от Декабрь 21, 2015, 17:20
QStorageInfo присутствует в версиях 5.4+. Так на оффсайте написано.
Странно, но в версии Qt5.4.1 mingw под Windows 7 тоже не нашел ее. Может где-то в дебрях спрячена, так как на #include <QStorageInfo> било ошибку.


Название: Re: Как средствами Qt узнать что была подключена или отключена флешка?
Отправлено: billy4685 от Декабрь 21, 2015, 17:22
Начал вот по немногу разбираться с libusb под Windows. Не могу теперь найти как узнать метку подключенной флешки с помощью этой библиотеки. Может кто видел примеры подобные?