Russian Qt Forum
Ноябрь 25, 2024, 16:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QSetting чтение из реестра  (Прочитано 8842 раз)
Ascet
Гость
« : Март 25, 2015, 05:47 »

Здравствуйте, возникла проблема - требуется получить список COM-портов имеющихся у машины.
Пытаюсь прочитать из реестра в Windows с помощью QSetting следующим образом:
Код:
     QSettings settings("HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM", QSettings::NativeFormat);
    QStringList keyList = settings.allKeys();
    QStringList valList;
    for(int i = 0; i < keyList.size(); i++)
    {
        valList.append(settings.value(keyList.at(i)).toString());
    }

В keyList правильные значения проверял. Ключи читаются отлично, но в valList - пусто. Проверка ключей с помощью settings->contains(keyList(i)) возвращает всегда false. Как так может быть? Ведь я только что эти ключи от него(settings) получил и тут же спрашиваю его есть ли такой ключ, а он мне говорит что нету.

Что я делаю не так?
« Последнее редактирование: Март 25, 2015, 05:57 от Ascet » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Март 25, 2015, 07:11 »

Проверил у себя, и вправду не находит, хотя в реестре значение есть, странно...

Код
C++ (Qt)
   QSettings settings("HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM", QSettings::NativeFormat);
 
   foreach (QString key, settings.allKeys()) {
       qDebug() << key << ": " << settings.value(key);
   }
 

Цитировать
Запускается C:\foo\foo\build-untitled-Desktop_Qt_5_3_MinGW_32bit-Debug\debug\untitled.exe...
"/Device/Serial0" :  QVariant(Invalid)
C:\foo\foo\build-untitled-Desktop_Qt_5_3_MinGW_32bit-Debug\debug\untitled.exe завершился с кодом 0
Записан

qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #2 : Март 25, 2015, 08:49 »

и так на 32 бита и на 64 бита ?

в любом случаи дай возможность пользователю вводить имя порта вручную, а не только ограниченный список
Записан
Ascet
Гость
« Ответ #3 : Март 25, 2015, 08:59 »

Задание, которое передо мной стоит - автоматический поиск устройства, подключенного к какому-то из портов.
По заведомо мной прописанному списку программа пробегается и работает, но это лишь временное решение, а по идее должен быть поиск имеющихся портов и опрос по ним если они доступны.
Записан
GraninDm
Гость
« Ответ #4 : Март 25, 2015, 09:23 »

Вы же все равно будете с портами работать.
Может быть использовать для этого QSerialPort и QSerialPortInfo.
Записан
Ascet
Гость
« Ответ #5 : Март 25, 2015, 11:10 »

Ну тут к сожалению имеет место проблема с целевой системой. Там Qt будет не новее 4.8.3, а возможности доставлять библиотечки не будет к сожалению=(
Сам жалею, что нет такой возможности ибо через QSerialPort всё решается довольно просто=(
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #6 : Март 25, 2015, 11:25 »

Цитировать
Там Qt будет не новее 4.8.3, а возможности доставлять библиотечки не будет к сожалению

1. QtSerialPort работает и с Qt 4.8.x.
2. QSettings не работает с такими путями реестра.


Записан

ArchLinux x86_64 / Win10 64 bit
Ascet
Гость
« Ответ #7 : Март 25, 2015, 11:37 »

в 4.8 QSerialPort нет, он доставляется поверх, чего я сделать не могу.
А не можете подсказать почему не работает этими путями и где можно прочитать про это?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Март 25, 2015, 11:41 »

в 4.8 QSerialPort нет, он доставляется поверх, чего я сделать не могу.
А что тебе мешает включить его в свой проект в 3rdparty?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #9 : Март 25, 2015, 12:56 »

Ну тут к сожалению имеет место проблема с целевой системой. Там Qt будет не новее 4.8.3, а возможности доставлять библиотечки не будет к сожалению=(

qt5 библиотеки можно и рядом положить - это тоже запрещено по условиям задачи ?
Записан
Ascet
Гость
« Ответ #10 : Март 25, 2015, 13:35 »

Ну кстати да, с собой тащить эти библиотеки...
Сейчас рабочий день уже подходит к концу, завтра попробую провернуть такой вариант.
спасибо)

Но с реестром всё равно хотелось бы разобраться почему он не может получить эти значения?
Записан
GraninDm
Гость
« Ответ #11 : Март 25, 2015, 13:57 »

Наверное потому, что это класс для работы с настройками приложения а не ОС.
Ибо реестр не кроссплатформенная штука.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #12 : Март 25, 2015, 14:11 »

Цитата: Ascet
Но с реестром всё равно хотелось бы разобраться почему он не может получить эти значения?

Потому что он не может "распарсить" ключи вида:

Цитировать
\Device\Serial0
\Device\com0com10

и прочие, т.к. у них обратный слеш (такой вот QSettings), тут нужно использовать WinAPI, ЕМНИП.

PS: Можешь (ради эксперимента) создать там в реестре нормальные ключи без '\' и увидишь, что оно тогда вернет все что надо.
« Последнее редактирование: Март 25, 2015, 14:13 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #13 : Март 25, 2015, 22:34 »

а пройтись по всем компортам вручную, просто каждый раз создавая и открывая устройство COM%1 от 1...MAX, где MAX максимальное колво устройств в системе. Запомнить удачно открытые устройства и дальше работать только с ними. Если изменилась конфигурация, нажать на кнопку "Найти" и опять прогнать цикл открытия ком-портов. Я бы так сделал. При чем можно в несколько потоков открывать для ускорения сканирования.
Записан
Bepec
Гость
« Ответ #14 : Март 26, 2015, 02:30 »

Winapi в помощь, дело десяти минут, готовых примеров полно.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.126 секунд. Запросов: 23.