QT常见问题.docx
返回true,何“会有效的16依供庖商第,J存在;否则返回false.boolQSerialPortlnfo=hasProductdentifier()ConSt这囹true,假如行一个有效的16位产丛数出存在;否则这旧falseQT中行1;信、;的声明是在又文件中进行的,QT的SigMS关饰字指出进入门方:M叫M.MC即可声明自己的信号.例知,下面定义了三个信号ISignals:VoidmySig0;VoidmySgnal(nt×);VoidmyS9alParam(ntx,nty);在上面的定义中.SignalS是QT的美键?,而#C/C+的关键字,按下来的行VoldmySlgnaK)定义了信号mySignal.这个。:“没小携用格数,接下次的力voidmySgnal(i11tx)定义/才名名/:SmySignai,不过也携带,个凭形整数.这有点类似于C+中的点函数,从形式上访信号的声明利般的C+函社是和网的.不过信号却没有用数体定义.另外,信号的这口类型都是VOid,不变希硕能从信号返回个什么仃用信J1.信号有moc门动产生,他么不应"W.cpp文件中实现,1ft:ffi½股的C+成员,健被正常明川,也么州的特殊性就是特别多信号能和其相关联,当卬其关联的信号校射是,这个恰就会低则用.嵋能“拿数但横的梦致不能有跳有依.既然Hl是假的成员用数,闪此和其他的咕数相同,他打也有“取权米.情的取权限嫡定徘能够和其相关UX.司股的C+成员函放相同.僧函®(也分为:科哭叫R3:PUbbcslots,pnvateslotsfprotectedslots.Publicslots:花这个区内声明的1.6味希全部对象那可格信号和之相连接.这对于烟件一穆特别有用,你能创趣彼北无不了解的对象.稔他们的伯号和柏造行在按次便AMMMf正确的传递.protectedslots:在这个区内向明的柏意味弟"i豹英及H子哭能绢格怡号和之相连接.这适用于瑞"楮.Ifef;是美实现的,部分.不过其界面接口却面对外郃.Privatedots:任这个区内声明的常意昧也只书关门施终格信号和之相it接.这适用于纤缰特别St密的关.publicslots:voidapply(voidCappIyFunctionXQ1.isf.void*),char*):H不合语法;你能来纳下面的方法绕过这个限制:typedefvoid(ApplyFuctionType)(Q1.isf.void,);classsomeClass:publicQObject(Q_OBJECT(-publicslots:voidapply(ApplyFunctionType,car,);):1.侑号和梢不能有缺省参数既然SignaI->sot绑定是发生在运行时刻,那么.从概会上讲运用我省参数是困难的,下面的用法是不合珅的:classSomeClass:publicQObject(QOBJECTpublicslots:voidSOmeSlOt(inix=100)jx的缺省di定义成100.在梢曲Q以中运用是佛误的;&佶号和情也不能携带模板类参数.他如将信号、槽声明为模板类参数的话,即使m。C工具不报告惜识,也不行能得到预期的结果.例如,下面的例了中当信号放射时,槽的数不会被正确调用:-publicslots:voidMyWidget:set1.ocation(pairlocation);-1publicsignals:voidMyObject:moved(pairlocation):不过,你能运用typed饼语句来烧过这个Ri制.如下所示:typedefpairIntPair;signals:/(.,;号定义区friendclassClassTemplate;/此处定义不合语法QTextStream和QDataStream的Ix分QTextStream和QDataStream都是面对数据流的,都适用于QlODeViCe,但是他们的他重点不同。可以这么说,QTeXtStream能做的事情QDataStream都能做。QTextStreamfttR向QloDeViee文本读写,这我所说的文本指的是一般的简沽的QCharqSmngq1.atinlCharjnt等等之内的,和Ci?5吉中巧文件或并网洛传输的时帕先将内容填充到个buffer.进行操作有点类似.M于般的轻斑徼的流操作类.下面代码就是写文件操作QFiIcdata("outputtxt");if(data.open(QFile:WriteOnlyIQFile:Truncate)QTextStreamoutdata>out«"Result:-«qSetFieldWidt.h(10)«left«3.14«2.;/write”Re§ulJ3.142.7w)QDataStream则是使JIvr数据格式和类型,QDataStream数抠就不仅UJ以操作QTextStream所能处列!的般文本,而tl可以对特定格式的类型数甥进行完备的输入与输111.熟识1.inUXC开发的程序员都应当知道,通过s。Cket传输text文本数据比较简洁.假如我们想通过Socket传输特定的数据垢构而1.聘平台以及CUP进行操作和解析就比蚊麻烦。比如对于一个点的坐标,幺妹传输一个结构体,让接收端进行解析但是可能对于不同的平台以及不同的内存安排方式的CPU来说,解析的结果不徵定是我们预期的,5是实现,但是会比较麻烦。QDataSream就可以轻松的做到这点,QDataSream将数据序列化C不仅可以读写text,而且还好可以读写一个特定数据类型,比如QPantQFOu几乎QT支持的全部类型都可以运用QDataSream迸行操作。一卜以读写QPOm为例:QPointpos(8r6)QPointtnp;QByteArraydatagram;QDataStreamout(datagram,QIODevice:Writenly>out.setVer21on(CDa:.a11!r<*.-11::Qtl_4_3);out«pos();此时d,犹是QPoin匕out»CmP此时tmp的强标就是tmp(8,6)QDataStream是依据类型以及输出输入依次来确定输出数据,列举卜面的例广来说明问题;QFilefile("tile.datw);file.open(QIODcvicc:WritcOnly);QDataStreamoutlie);/wewillserializethedataintothefile,''nansweris");/serializeastringout«qint32142;/serializeanintegerExample(readbinarydatafromastream:QFilefileC,file.dat->filc.opcn(QIODovicc:RciidOnly);QDataStreamin(&file>/readthedataserializedfrorathefileQStringstr;qint32a;in»atr»a;/extract,theansewerisNand42串口通信异步传输:是指次也输个字符(58位)的数据.班个字符用个书始位引导,用一个停止位结束。这样就能是接收方分析动身送方式的数据。但他沽发生计时漂移.异步通信中两个匝要的指标;字符帧格式和波特率,数据通常以字符或者字节为取位组成字符帧传送.字符帧由发送雨巡帧发送,通过传输线被接收设备逐帧接收.发送端和接收端可以由抑子的时钟来限制数据的发送和接收,这两个时神源彼此独立,互补同步,接收端检测到传输线上发送过来的低电平逻辑“0"(即字符独起始位)时,确定发送端已起先发送数据,好当接收端收到字符帧中的停止位时,就知道假字符已羟发送完毕.同步传输:采纳面对字符或面对位的插入方式,限制所传送的一帧的胆始.同步异步报文传粕方式也是如此.缺点:要求发送时钟和接收时钟要保持严格的同步.那口忿数定义:BaudRateTypeBaudRate;波特率设置,我们设罚为9600,即程序中用BAUD9600:DataBitsTypeDataBitS:数据位设I1.我In设置为8位数据位,即DATA_8:ParityTypeParity:奇科校验设力.我们设置为无校验.即PAF1.NoNE:StopBitsTypeStopBitS:停止位设置,我们设置为1为停止位.即STOP;FlowTypeFlowControI;数据流限制设置.我们设置为多数据流限制,即F1.OW一。FF:1.ongTimeou1.MiIiisec;延时设置.我们设置为我时500ms,t!l500:这样便写出以下程序:StructPortSGttingsmyComStting=(BAUD960C.DATA_8,PAR_NONE_STOP_1,F1.OW_OFF,500;我们定义了个结构体变/myComSetting,并对其进行了初始化QT写的Wi1.QeXtSeriaIPort小11数业不能超过10个如下怪改,忸思几个就几个:QStringportleft=port.mid(3,3)/qDebug()<<"portnameis:"VVPOrtVVPOrtleft;IntPortnlJm=PoftlefUOIn10;if(portnum<10)(Portb-port:Else(Portb="l"POrtb叩on;Win_Handle=CrGateFileA(portb.toAsdi().GENERIC_READ|GENERlJWRITE,FI1.E_SHARE_READFI1.E_SHARE_WRITE.NU1.1.OPEN_EXISTING.(JwFIagsAttributes,NU1.1.);QT串口发送十六进制数据接收串口数据并十六进制显示代码如卜:PortSettingsmyComSetting=BAUD9600DATA_8,PAReNONErSTOP_1ZF1.CW_OFFr101;7/定义一桶构体,用来存放串I各个参数myCom-newwin_Q'extSerialPort(ui->comboBox->currentTe×t()rmyComSe111ngrQextSerla1Base:SventDriven);定义串口对*.并传递参数.在构造函数里对其进行初始化myCora->open(QIODevice:ReadWrite);myCotn->setBaudRate(BAUDl15200);myCora->seCDataBits(DATA-8);myCom->setParity(PAR-N0N三);myCom->setStopBits(STOPl);myCom->setFlowContol(F1.OW_OFF);myCom->5Cti70Ut(10);/以可谀写方式打开申口connect(myComr$lGh-(readyRead()>r*-J(readMyCom();信号和俏函数关联当一口煤冲区方数据时.进行读小口搽作发送卜六进制数据QByteArrayba;for