关于Qt4.8.5读注册表获取串口号的问题(解决无函数usc2的问题)

本文介绍了在使用Qt4.8.5进行串口通信时遇到的读取注册表问题,特别是针对含有特殊字符如'/'的键名。通过两种方式解决,包括使用WinAPI和修改注册表键名称。同时,针对qt4.8.5中缺失的ucs2()函数,提供了替代的转换方法,以及如何正确获取串口信息的示例代码。
摘要由CSDN通过智能技术生成


一.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值