題之串口編程 -上位機(jī)設(shè)計(jì))
目錄一、界面設(shè)計(jì)二、程序設(shè)計(jì)附件有程序源碼三、驗(yàn)證Windows下將QT項(xiàng)目生成可執(zhí)行文件exe一、界面設(shè)計(jì)首先正常創(chuàng)建一個(gè)新的工程的流程創(chuàng)建完成之后在.pro文件中添加serialport,即在頭文件中添加串口類(lèi)進(jìn)入U(xiǎn)I界面編輯界面的大小為800480先實(shí)現(xiàn)一個(gè)串口選擇實(shí)現(xiàn)多個(gè)將所有組件進(jìn)行水平布局設(shè)計(jì)比例垂直比例設(shè)為5:2接下來(lái)就要補(bǔ)充下QComboBox的內(nèi)容波特率停止位數(shù)據(jù)位校驗(yàn)位如果我們不知道有哪些可以直接去幫助文檔里面找即可以搜索例如至此界面設(shè)計(jì)結(jié)束接下來(lái)將會(huì)進(jìn)行程序設(shè)計(jì)二、程序設(shè)計(jì)附件有程序源碼像串口選擇這里的QComboBox組件就不能像上面這樣一個(gè)一個(gè)添加進(jìn)去不行因?yàn)榇谑俏粗?。其?shí)QT提供了一個(gè)類(lèi)可供掃描本機(jī)或者開(kāi)發(fā)板上的可用串口它會(huì)將串口信息儲(chǔ)存到一個(gè)容器里面遍歷這個(gè)容器就可以提取這些串口的信息即在頭文件中添加QSerialPortInfo串口信息類(lèi)。那怎么把本機(jī)或者開(kāi)發(fā)板上的可用串口添加到QComboBox里面呢遍歷有一個(gè)方法foreach循環(huán)添加串口信息串口名字一個(gè)參數(shù)var是變量一個(gè)參數(shù)container是容器。串口信息類(lèi)會(huì)掃描本機(jī)或者開(kāi)發(fā)板上的串口會(huì)返回一個(gè)串口信息類(lèi)的容器然后我們從這個(gè)容器里面讀取串口信息。用串口的這個(gè)類(lèi)設(shè)置這個(gè)串口//mainwindows.cpp void MainWindow::on_pushButton_clicked(bool checked) { if(checked){ //設(shè)置要打開(kāi)的串口名字 serialport-setPortName(ui-comboBox-currentText()); //設(shè)置波特率 serialport-setBaudRate(ui-comboBox_2-currentText().toInt()); //設(shè)置停止位 serialport-setStopBits(QSerialPort::StopBits(ui-comboBox_3-currentText().toInt())); //設(shè)置數(shù)據(jù)位 serialport-setDataBits(QSerialPort::DataBits(ui-comboBox_4-currentText().toInt())); //設(shè)置校驗(yàn)位 switch (ui-comboBox_5-currentIndex()) { case 0: serialport-setParity(QSerialPort::NoParity); break; case 1: serialport-setParity(QSerialPort::EvenParity); break; case 2: serialport-setParity(QSerialPort::OddParity); break; case 3: serialport-setParity(QSerialPort::SpaceParity); break; case 4: serialport-setParity(QSerialPort::MarkParity); break; default: break; } //設(shè)置流控為無(wú) serialport-setFlowControl(QSerialPort::NoFlowControl); if(!serialport-open(QIODevice::ReadWrite)) { QMessageBox::about(this, 錯(cuò)誤, 串口打開(kāi)失敗可能已經(jīng)被占用); return; } //打開(kāi)串口后各選項(xiàng)變?yōu)榛疑床豢蛇x狀態(tài) ui-comboBox-setEnabled(false); ui-comboBox_2-setEnabled(false); ui-comboBox_3-setEnabled(false); ui-comboBox_4-setEnabled(false); ui-comboBox_5-setEnabled(false); ui-pushButton-setText(關(guān)閉串口); } else { //關(guān)閉串口 serialport-close(); ui-comboBox-setEnabled(true); ui-comboBox_2-setEnabled(true); ui-comboBox_3-setEnabled(true); ui-comboBox_4-setEnabled(true); ui-comboBox_5-setEnabled(true); ui-pushButton-setText(打開(kāi)串口); } }在使用串口類(lèi)之前要先實(shí)例化對(duì)象實(shí)例化之后打開(kāi)串口的槽函數(shù)方才生效接下來(lái)實(shí)現(xiàn)“掃描本機(jī)的串口并且添加到下拉框列表”創(chuàng)建一個(gè)槽函數(shù)連接槽函數(shù)最后實(shí)現(xiàn)發(fā)送和清除發(fā)送的槽函數(shù)清除發(fā)送同理分別編寫(xiě)三、驗(yàn)證Windows下將QT項(xiàng)目生成可執(zhí)行文件exe生成工程名.exe文件如下找到后將工程名.exe文件復(fù)制到一個(gè)空的文件夾中點(diǎn)擊它并且將命令行工具定位到空的文件夾目錄下windeployqt 工程名.exe執(zhí)行成功后來(lái)到空的文件夾下執(zhí)行后最終效果如下