Qt串口通信開發(fā)之QSerialPort模塊簡(jiǎn)單使用方法與實(shí)例
我這里主要是對(duì)串口類的簡(jiǎn)單使用,實(shí)現(xiàn)的功能是以讀寫方式打開串口,點(diǎn)擊發(fā)送數(shù)據(jù)按鈕將發(fā)送區(qū)的數(shù)據(jù)發(fā)送到緩沖區(qū),然后在接收區(qū)顯示出來,界面如下:(源碼可以在這里下載)
這里使用了QSerialPort模塊提供的兩個(gè)類:QSerialPort類和QSerialPortInfo類,QSerialPort類提供了對(duì)串口的操作,QSerialPortInfo類提供了對(duì)串口信息的獲取。下面是主要代碼,包含了對(duì)串口類的簡(jiǎn)單使用。
首先,一定要在.pro文件中添加:QT += serialport
串口初始化如下:
/****************************串口初始化*****************************/ void MainWindow::initPort() { //讀取串口信息 foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { qDebug()<<"Name:"<<info.portName(); qDebug()<<"Description:"<<info.description(); qDebug()<<"Manufacturer:"<<info.manufacturer(); //這里相當(dāng)于自動(dòng)識(shí)別串口號(hào)之后添加到了cmb,如果要手動(dòng)選擇可以用下面列表的方式添加進(jìn)去 QSerialPort serial; serial.setPort(info); if(serial.open(QIODevice::ReadWrite)) { //將串口號(hào)添加到cmb ui->cmbPortName->addItem(info.portName()); //關(guān)閉串口等待人為(打開串口按鈕)打開 serial.close(); } } QStringList baudList;//波特率 QStringList parityList;//校驗(yàn)位 QStringList dataBitsList;//數(shù)據(jù)位 QStringList stopBitsList;//停止位 baudList<<"50"<<"75"<<"100"<<"134"<<"150"<<"200"<<"300" <<"600"<<"1200"<<"1800"<<"2400"<<"4800"<<"9600" <<"14400"<<"19200"<<"38400"<<"56000"<<"57600" <<"76800"<<"115200"<<"128000"<<"256000"; ui->cmbBaudRate->addItems(baudList); ui->cmbBaudRate->setCurrentIndex(12); parityList<<"無"<<"奇"<<"偶"; parityList<<"標(biāo)志"; parityList<<"空格"; ui->cmbParity->addItems(parityList); ui->cmbParity->setCurrentIndex(0); dataBitsList<<"5"<<"6"<<"7"<<"8"; ui->cmbDataBits->addItems(dataBitsList); ui->cmbDataBits->setCurrentIndex(3); stopBitsList<<"1"; stopBitsList<<"1.5"; stopBitsList<<"2"; ui->cmbStopBits->addItems(stopBitsList); ui->cmbStopBits->setCurrentIndex(0); //設(shè)置按鈕可以被按下 ui->btnOpen->setCheckable(true); }
這里通過遍歷所有串口將我們需要使用的串口添加到了combox中,如果想要手動(dòng)選擇可以將串口名稱通過列表的方式添加到combox中,到使用的時(shí)候再選擇。
串口設(shè)置如下:
/****************************串口設(shè)置******************************/ void MainWindow::on_btnOpen_clicked() { if(ui->btnOpen->text() == "打開串口") { my_serialport = new QSerialPort(this); //設(shè)置串口號(hào) my_serialport->setPortName(ui->cmbPortName->currentText()); //以讀寫方式打開串口 if(my_serialport->open(QIODevice::ReadWrite)) { //設(shè)置波特率 my_serialport->setBaudRate(ui->cmbBaudRate->currentText().toInt()); //設(shè)置數(shù)據(jù)位 my_serialport->setDataBits(QSerialPort::Data8); //設(shè)置校驗(yàn)位 my_serialport->setParity(QSerialPort::NoParity); //設(shè)置流控制 my_serialport->setFlowControl(QSerialPort::NoFlowControl); //設(shè)置停止位 my_serialport->setStopBits(QSerialPort::OneStop); //每秒讀一次 timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(readComDataSlot())); timer->start(1000); setNonSelectable(); } else { QMessageBox::about(NULL, "提示", "串口沒有打開!"); return; } } else { timer->stop(); setSelectable(); my_serialport->close(); } }
這里是對(duì)串口的設(shè)置,需要先打開串口才能設(shè)置串口參數(shù)。參數(shù)設(shè)置好之后就可以通過read()和write()函數(shù)進(jìn)行數(shù)據(jù)的讀寫,我這里用的是1秒的定時(shí)器來讀緩沖區(qū)的數(shù)據(jù)。
數(shù)據(jù)收發(fā)如下:
/****************************數(shù)據(jù)傳輸******************************/ void MainWindow::readComDataSlot() { //讀取串口數(shù)據(jù) QByteArray readComData = my_serialport->readAll(); //將讀到的數(shù)據(jù)顯示到數(shù)據(jù)接收區(qū)的te中 if(readComData != NULL) { ui->teReceiveData->append(readComData); } //清除緩沖區(qū) readComData.clear(); } void MainWindow::on_btnSend_clicked() { //獲取發(fā)送區(qū)的數(shù)據(jù) QString sendData = ui->teSendData->toPlainText(); QByteArray sendData_2 = sendData.toLatin1(); //寫入緩沖區(qū) my_serialport->write(sendData_2); }
本文簡(jiǎn)單介紹了下Qt串口通信模塊QSerialPort簡(jiǎn)單使用方法與實(shí)例,更詳細(xì)的Qt串口通信模塊QSerialPort知識(shí)請(qǐng)查看下面的相關(guān)鏈接
相關(guān)文章
C++中指針的數(shù)據(jù)類型和運(yùn)算相關(guān)知識(shí)小結(jié)
這篇文章主要介紹了C++中指針的數(shù)據(jù)類型和運(yùn)算相關(guān)知識(shí)小結(jié),是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)庫(kù)請(qǐng)求
這篇文章主要為大家介紹了Qt中是如何實(shí)現(xiàn)通用數(shù)據(jù)庫(kù)請(qǐng)求的,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Qt有一定幫助,感興趣的小伙伴可以了解一下2022-03-03淺析Boost智能指針:scoped_ptr shared_ptr weak_ptr
雖然通過弱引用指針可以有效的解除循環(huán)引用,但這種方式必須在程序員能預(yù)見會(huì)出現(xiàn)循環(huán)引用的情況下才能使用,也可以是說這個(gè)僅僅是一種編譯期的解決方案,如果程序在運(yùn)行過程中出現(xiàn)了循環(huán)引用,還是會(huì)造成內(nèi)存泄漏的2013-09-09