- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
以前写的串口通讯的工具,最近没事整理了一下记录下来。由于Qt没有实现关于串口操作的类,所以一般情况下可以自己写线程实现,也可以使用第三方类。这里使用第三方类。可以到网上去下载,也有关于这个第三方类的介绍。这里不多说了,在win下,主要就是下载这几个文件:qextserialbase.h,qextserialport.h,win_qextserialport.h,qextserialbase.cpp,qextserialport.cpp,win_qextserialport.cpp。如果是在linux下,则把win_qextserialport.h和win_qextserialport.cpp替换为posix_qextserialport.h和posix_qextserialport.cpp这两个文件即可。
自动识别COM口:通过读注册表实现(当然linux下不可用)。
classmainwindow:publicQMainWindow,publicUi_mainwindowClass
{
Q_OBJECT
public:
mainwindow();
~mainwindow(){};
public:
键名
QStringgetcomm(intindex,QStringkeyorvalue);//读取
private:
voidinit_com();
Win_QextSerialPort*myCom;//声明对象
QTimer*timer;
QStringListm_listCommand; //待发送的命令wchar_tsubkey[80];
wchar_tkeyname[256];//键名数组charkeyvalue[256];//键值数组intindexnum;
DWORDkeysize,type,valuesize;HKEYhKey;
......
}
voidmainwindow::init_com()
{
QStringpath=HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM;
QSettings*settings=newQSettings(path,QSettings::NativeFormat);
QStringListkey=settings-allKeys();QStringListcomlist;
QStringListBaudlist;
QStringListParitylist;QStringListDataBitslist;QStringListStopBitslist;QStringListControlFlowlist;
intkk=key.size();inti;comlist.clear();for(i=0;ikk;i++)
{
comlistgetcomm(i,value);
}
comboBox-addItems(comlist);
//波特率Baudlist.clear();
Baudlist30060024004800960019200
5600057600921600;
baudRateComboBox-addItems(Baudlist);
......
}
QStringmainwindow::getcomm(intindex,QStringkeyorvalue)
{
QStringcommresult=;
QStringstrkey=HARDWARE\\DEVICEMAP\\SERIALCOMM;//子键路径inta=strkey.toWCharArray(subkey);
subkey[a]=L\0;if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_READ|KEY_QUER
Y_VALUE,hKey)!=0)
{
QStringerror=Cannotopenregedit!;
}
QStringkeymessage=;//键名QStringmessage=;
QStringvaluemessage=;//键值indexnum=index;//要读取键值的索引号
keysize=sizeof(keyname);valuesize=sizeof(keyvalue);
if(::RegEnumValue(hKey,indexnum,keyname,keysize,0,type,(BYTE*)keyvalue,valuesize)==0)
文档评论(0)