QTシリアル通信2
3814 ワード
, 。 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 )。
class mainwindow : public QMainWindow,public Ui_mainwindowClass
{
Q_OBJECT
public:
mainwindow();
~mainwindow(){};
public:
QString getcomm(int index,QString keyorvalue); //
private:
void init_com();
Win_QextSerialPort *myCom;//
QTimer *timer;
QStringList m_listCommand; //
wchar_t subkey[80];
wchar_t keyname[256]; //
char keyvalue[256]; //
int indexnum;
DWORD keysize,type,valuesize;
HKEY hKey;
......
}
void mainwindow::init_com()
{
QString path="HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM";
QSettings *settings=new QSettings(path,QSettings::NativeFormat);
QStringList key=settings->allKeys();
QStringList comlist ;
QStringList Baudlist ;
QStringList Paritylist ;
QStringList DataBitslist;
QStringList StopBitslist;
QStringList ControlFlowlist;
int kk = key.size();
int i;
comlist.clear();
for(i=0;i<kk;i++)
{
comlist << getcomm(i,"value");
}
comboBox->addItems(comlist);
//
Baudlist.clear();
Baudlist<< "300" << "600" << "2400" << "4800" << "9600"<< "19200" <<
"56000" << "57600" << "115200"<<"128000"<<"256000"<< "921600";
baudRateComboBox->addItems(Baudlist);
......
}
QString mainwindow::getcomm(int index,QString keyorvalue)
{
QString commresult="";
QString strkey="HARDWARE\\DEVICEMAP\\SERIALCOMM";//
int a=strkey.toWCharArray(subkey);
subkey[a]=L'\0';
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_READ|KEY_QUERY_VALUE,&hKey)!=0)
{
QString error="Cannot open regedit!";
}
QString keymessage="";//
QString message="";
QString valuemessage="";//
indexnum=index;//
keysize=sizeof(keyname);
valuesize=sizeof(keyvalue);
if(::RegEnumValue(hKey,indexnum,keyname,&keysize,0,&type,(BYTE*)keyvalue,&valuesize)==0)
{
//
for(int i=0;i<keysize;i++)
{
message=QString::fromStdWString(keyname);
keymessage.append(message);
}
//
for(int j=0;j<valuesize;j++)
{
if(keyvalue[j]!=0x00)
{
valuemessage.append(keyvalue[j]);
}
}
if(keyorvalue=="key")
{
commresult=keymessage;
}
if(keyorvalue=="value")
{
commresult=valuemessage;
}
}
else
{
commresult="nokey";
}
::RegCloseKey(hKey);//
return commresult;
}
, , , , 。 , 9 ( 9) 9 。
QString m_port = port_name.right(port_name.length()-3);
if(m_port.toInt()>9)
{
QString xx = "\\\\.\\";
xx.append(port_name);
myCom->setPortName(xx);
}
else
{
myCom->setPortName(port_name);
}
myCom->open(QIODevice::ReadWrite);
,
connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));// ,
。
QString str=sendEdit->toPlainText();// sendEdit str
str.append("\r
");
QByteArray aa=str.toAscii();
const char * strdata=aa.data();
int rec=myCom->writeData(strdata,qstrlen(strdata));
myCom->flush();
void mainwindow::readMyCom()
{
char buf[1024];
memset(buf, 0, sizeof(buf));
qint64 temp=myCom->readData(buf,sizeof(buf));
buf[temp+1]=0;
}