Название: QSetting чтение из реестра Отправлено: Ascet от Март 25, 2015, 05:47 Здравствуйте, возникла проблема - требуется получить список COM-портов имеющихся у машины.
Пытаюсь прочитать из реестра в Windows с помощью QSetting следующим образом: Код: QSettings settings("HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM", QSettings::NativeFormat); В keyList правильные значения проверял. Ключи читаются отлично, но в valList - пусто. Проверка ключей с помощью settings->contains(keyList(i)) возвращает всегда false. Как так может быть? Ведь я только что эти ключи от него(settings) получил и тут же спрашиваю его есть ли такой ключ, а он мне говорит что нету. Что я делаю не так? Название: Re: QSetting чтение из реестра Отправлено: gil9red от Март 25, 2015, 07:11 Проверил у себя, и вправду не находит, хотя в реестре значение есть, странно...
Код
Цитировать Запускается 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 Название: Re: QSetting чтение из реестра Отправлено: qate от Март 25, 2015, 08:49 и так на 32 бита и на 64 бита ?
в любом случаи дай возможность пользователю вводить имя порта вручную, а не только ограниченный список Название: Re: QSetting чтение из реестра Отправлено: Ascet от Март 25, 2015, 08:59 Задание, которое передо мной стоит - автоматический поиск устройства, подключенного к какому-то из портов.
По заведомо мной прописанному списку программа пробегается и работает, но это лишь временное решение, а по идее должен быть поиск имеющихся портов и опрос по ним если они доступны. Название: Re: QSetting чтение из реестра Отправлено: GraninDm от Март 25, 2015, 09:23 Вы же все равно будете с портами работать.
Может быть использовать для этого QSerialPort и QSerialPortInfo. Название: Re: QSetting чтение из реестра Отправлено: Ascet от Март 25, 2015, 11:10 Ну тут к сожалению имеет место проблема с целевой системой. Там Qt будет не новее 4.8.3, а возможности доставлять библиотечки не будет к сожалению=(
Сам жалею, что нет такой возможности ибо через QSerialPort всё решается довольно просто=( Название: Re: QSetting чтение из реестра Отправлено: kuzulis от Март 25, 2015, 11:25 Цитировать Там Qt будет не новее 4.8.3, а возможности доставлять библиотечки не будет к сожалению 1. QtSerialPort работает и с Qt 4.8.x. 2. QSettings не работает с такими путями реестра. Название: Re: QSetting чтение из реестра Отправлено: Ascet от Март 25, 2015, 11:37 в 4.8 QSerialPort нет, он доставляется поверх, чего я сделать не могу.
А не можете подсказать почему не работает этими путями и где можно прочитать про это? Название: Re: QSetting чтение из реестра Отправлено: Пантер от Март 25, 2015, 11:41 в 4.8 QSerialPort нет, он доставляется поверх, чего я сделать не могу. А что тебе мешает включить его в свой проект в 3rdparty?Название: Re: QSetting чтение из реестра Отправлено: qate от Март 25, 2015, 12:56 Ну тут к сожалению имеет место проблема с целевой системой. Там Qt будет не новее 4.8.3, а возможности доставлять библиотечки не будет к сожалению=( qt5 библиотеки можно и рядом положить - это тоже запрещено по условиям задачи ? Название: Re: QSetting чтение из реестра Отправлено: Ascet от Март 25, 2015, 13:35 Ну кстати да, с собой тащить эти библиотеки...
Сейчас рабочий день уже подходит к концу, завтра попробую провернуть такой вариант. спасибо) Но с реестром всё равно хотелось бы разобраться почему он не может получить эти значения? Название: Re: QSetting чтение из реестра Отправлено: GraninDm от Март 25, 2015, 13:57 Наверное потому, что это класс для работы с настройками приложения а не ОС.
Ибо реестр не кроссплатформенная штука. Название: Re: QSetting чтение из реестра Отправлено: kuzulis от Март 25, 2015, 14:11 Цитата: Ascet Но с реестром всё равно хотелось бы разобраться почему он не может получить эти значения? Потому что он не может "распарсить" ключи вида: Цитировать \Device\Serial0 \Device\com0com10 и прочие, т.к. у них обратный слеш (такой вот QSettings), тут нужно использовать WinAPI, ЕМНИП. PS: Можешь (ради эксперимента) создать там в реестре нормальные ключи без '\' и увидишь, что оно тогда вернет все что надо. Название: Re: QSetting чтение из реестра Отправлено: Fregloin от Март 25, 2015, 22:34 а пройтись по всем компортам вручную, просто каждый раз создавая и открывая устройство COM%1 от 1...MAX, где MAX максимальное колво устройств в системе. Запомнить удачно открытые устройства и дальше работать только с ними. Если изменилась конфигурация, нажать на кнопку "Найти" и опять прогнать цикл открытия ком-портов. Я бы так сделал. При чем можно в несколько потоков открывать для ускорения сканирования.
Название: Re: QSetting чтение из реестра Отправлено: Bepec от Март 26, 2015, 02:30 Winapi в помощь, дело десяти минут, готовых примеров полно.
Название: Re: QSetting чтение из реестра Отправлено: Ascet от Март 26, 2015, 05:16 Цитировать а пройтись по всем компортам вручную, просто каждый раз создавая и открывая устройство COM%1 от 1...MAX, где MAX максимальное колво устройств в системе. Запомнить удачно открытые устройства и дальше работать только с ними. Если изменилась конфигурация, нажать на кнопку "Найти" и опять прогнать цикл открытия ком-портов. Я бы так сделал. При чем можно в несколько потоков открывать для ускорения сканирования. У меня так сделано сейчас и я хочу от этого отойти, получая реально имеющиеся порты. А вот с WinAPI разобраться нахрапом не смог ибо программист я начинающий, а те коды, которые в инете находил не заводились. Если вам не сложно можете скинуть работающий пример? Название: Re: QSetting чтение из реестра Отправлено: GraninDm от Март 26, 2015, 08:33 Так посмотрите qserialportinfo_win.cpp
static QStringList portNamesFromHardwareDeviceMap() ... |