一.QT4采用QSettings读注册表,不支持读取注册表key中含有"/"或者"\",解决办法:
1.采用winAPI
2. 替换修改注册表key名称,将"/"改成如"_"或者其他字符
二.QT4.8.5调用winAPI读注册表时遇到的问题:
网上多数流传的是“利用 Qt 4.1.0 读取注册表获得串口信息”之类的,里面部分代码:
QString strkey="HARDWARE\\DEVICEMAP\\SERIALCOMM";//子键路径
subkey=strkey.ucs2();//类型转换
而在qt4.8.5中ucs2()这个函数没有,不知道是不是版本的问题,
在另一篇博客(“Qt操作串口”(http://wangningmei.is-programmer.com/categories/7870/posts)和"QT串口通信2"(http://blog.csdn.net/qq61394323/article/details/16331131)中,方法却不同:
QString strkey="HARDWARE\\DEVICEMAP\\SERIALCOMM";//子键路径
int a=strkey.toWCharArray(subkey);
subkey[a]=L'\0';
经试验,此方法在qt4.8.5下有效
三.补充:
QSettings *reg = new QSettings("HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM",
QSettings::NativeFormat);
QStringList key = reg->allKeys();
reg->allKeys().size()可得到串口个数,windows下串口号键名一般带有"\",如"\Device\Silabser0",这样
reg->allKeys()[0]、reg->allKeys()[1]...均为空,所以才出现开始提到的问题
四.附录(部分代码,详情见上面两篇博客):
初始化Ui时:
QSettings reg ("HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM",
QSettings::NativeFormat);
QStringList key = reg.allKeys();
int com_num = key.size();//串口个数
QStringList comlist;
comlist.clear