qt获取电脑串口代码使用实例

//获取pc可用串口
#include<qt_windows.h>
#include<QSettings>

QStringList Serial::getComm()
{

QStringList comm;
comm.clear();
///*获取串口号相关
//    QStringList m_listcomboName;
HKEY hKey;
//    LPCWSTR subkey;
wchar_t keyname[ 256 ]; //键名数组
char keyvalue[ 256 ];   //键值数组
DWORD keysize, type, valuesize;
int indexnum;
///*获取串口号相关
QString keyorvalue = "value";
QString path = "HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM\\";
QSettings* settings = new QSettings( path, QSettings::NativeFormat );
QStringList key = settings->allKeys();
int num = int( key.size() );

if ( ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT( "HARDWARE\\DEVICEMAP\\SERIALCOMM" ), 0, KEY_READ, &hKey ) != 0 )
{
QString error = "Cannotopenregedit!"; //无法打开注册表时返回error
comm << error;
return comm;
} //if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_READ,&hKey)!=0)

for ( int index = 0; index < num; index++ )
{
QString commresult;

QString keymessage; //键名
QString message;
QString valuemessage; //键值
indexnum = index;     //要读取键值的索引号
keysize = sizeof( keyname );
valuesize = sizeof( keyvalue );
if ( ::RegEnumValue( hKey, static_cast< DWORD >( indexnum ), keyname, &keysize, 0, &type, (BYTE*)keyvalue, &valuesize ) == 0 ) //列举键名和值
{
for ( int i = 0; i < static_cast< int >( keysize ); i++ )
{
message = QString( "%1" ).arg( keyname[ i ] );
keymessage.append( message );
}
for ( int j = 0; j < static_cast< int >( valuesize ); j++ )
{
if ( keyvalue[ j ] != 0x00 )
{
valuemessage.append( keyvalue[ j ] );
}
} //for(intj=0;j<valuesize;j++)读取键值
if ( keyorvalue == "key" )
{
commresult = keymessage;
}
if ( keyorvalue == "value" )
{
commresult = valuemessage;
}
}
else
{
commresult = "nokey";
} //if(::RegEnumValue(hKey,indexnum,keyname,&keysize,0,&type,(BYTE*)keyvalue,&valuesize)==0)列举键名和值
comm<<commresult;
}
::RegCloseKey(hKey);//关闭注册表
return comm;
}

方式二

#include <QSerialPort>
#include <QSerialPortInfo>
//获取电脑可用串口
QStringList lis::getComm()
{
QStringList CommPortList;

foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
QSerialPort serial;
serial.setPort(info);
if (serial.open(QIODevice::ReadWrite))
{
CommPortList.append(serial.portName());
serial.close();
}
}
return CommPortList;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值