.pro文件修改
QT += serialport
.h头文件
#include <QtSerialPort/QSerialPort>//提供访问串口的功能
#include <QtSerialPort/QSerialPortInfo>//提供系统中存在的串口的信息
串口端口刷新
int index=0;
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
QSerialPort serial;
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite))
{
comPortCB->addItem(serial.portName());// comPortCB 端口选择框
if(!comValue.isEmpty())
{
if(serial.portName() == comValue)// comValue 默认端口名
{
comPortCB->setCurrentIndex(index);
}
}
serial.close();
index++;
}
}
textBrowser自动滚屏
// 把textBrowser的光标设置到最后,从而实现自动滚屏
QTextCursor text_cursor(acceptAreaTB->textCursor());//设置光标的位置
text_cursor.movePosition(QTextCursor::End);
acceptAreaTB->setTextCursor(text_cursor);//acceptAreaTB 接收显示窗口
启动自动选择历史port
通过定义一个 com_cfg.ini 文件
baud=115200
com=COM3
- 在每次启动时,通过判断历史端口是否为可以打开(availablePorts)。若该历史端口为有效的端口,则将该端口设置为当前端口,否则设为COM1。
- 在每次修改端口后,自动保存当前端口信息到com_cfg.ini配置文档中。
启动串口
该部分实现了串口的配置和启动问题,通过信号槽的方法读取串口数据!
- QObject::connect(serial,SIGNAL(readyRead()),this,SLOT(readData()));
try{
if(openComPB->text()==tr("打开串口"))
{
serial = new QSerialPort;
// [1]设置串口名
serial->setPortName(comPortCB->currentText());
// [2]打开串口
serial->open(QIODevice::ReadWrite);
// [3]设置波特率
serial->setBaudRate(comBaudCB->currentText().toInt());
// [4]设置数据位数
switch(comDataBitCB->currentIndex())
{
case 8: serial->setDataBits(QSerialPort::Data8); break;
case 7: serial->setDataBits(QSerialPort::Data7); break;
default: break;
}
// [5]设置奇偶校验
if(comParityBitCB->currentText()==tr("none")){
serial->setParity(QSerialPort::NoParity);}
else if(comParityBitCB->currentText()==tr("odd")){
serial->setParity(QSerialPort::OddParity);}
else{
serial->setParity(QSerialPort::EvenParity);}
// [6]设置停止位
if(comStopBitCB->currentText()==tr("1")){
serial->setStopBits(QSerialPort::OneStop);}
else if(comStopBitCB->currentText()==tr("1.5")){
serial->setStopBits(QSerialPort::OneAndHalfStop);}
else{
serial->setStopBits(QSerialPort::TwoStop);}
// [7]设置流控制
serial->setFlowControl(QSerialPort::NoFlowControl);
//关闭设置菜单使能
comPortCB->setEnabled(false);
comBaudCB->setEnabled(false);
comDataBitCB->setEnabled(false);
comParityBitCB->setEnabled(false);
comStopBitCB->setEnabled(false);
openComPB->setText(tr("关闭串口"));
openComPB->setDown(true);
sendPB->setEnabled(true);
// [8]连接信号槽
QObject::connect(serial,SIGNAL(readyRead()),this,SLOT(readData()));
//保存数据历史数据以便下次使用(使用键值对操作)
UserInfoUtils::clearInfo(configFileName);
UserInfoUtils::saveInfo(configFileName,baudKey,comBaudCB->currentText());
UserInfoUtils::saveInfo(configFileName,comKey,comPortCB->currentText());
}
else
{
//关闭串口
serial->clear();
serial->close();
serial->deleteLater();
//恢复设置使能
comPortCB->setEnabled(true);
comBaudCB->setEnabled(true);
comDataBitCB->setEnabled(true);
comParityBitCB->setEnabled(true);
comStopBitCB->setEnabled(true);
openComPB->setText(tr("打开串口"));
openComPB->setDown(false);
sendPB->setEnabled(false);
if(timer&&timer->isActive())
{
timer->stop();
}
}
}catch(QException e)
{
qDebug()<<"ERROR";
e.raise();
}
最终界面
其中各功能形成模块以方便管理和布局。终于可以方便对串口数据进行处理啦!