2.1QT串口通信
QT串口通信
1.在QT的pro文件中先加入serialport模块;
2.遍历可用端口;
QStringList SerialPortName;
foreach(const QSerialPortInfo &info,
QSerialPortInfo::availablePorts()){
SerialPortName << info.portName();
} //遍历可用端口
ui->port->clear();
ui->port->addItems(SerialPortName);
3.串口初始化,初始化端口号,波特率,校验位,数据位,停止位,流控制:
if(Serial==nullptr) return;
if(Serial->isOpen()){
Serial->clear();
Serial->close();
}
Serial->setPortName(ui->port->currentText()); //设置端口号
if(!Serial->open(QIODevice::ReadWrite)){ //端口是否被占用
ui->link->setText(Serial->portName()+"打开失败");
return;
}
Serial->setBaudRate(ui->baudRate->currentText().toInt()); //设置波特率
int data=ui->dataBits->currentText().toInt(); //设置数据位
switch(data){
case 8:
Serial->setDataBits(QSerialPort::Data8);
break;
case 7:
Serial->setDataBits(QSerialPort::Data7);
break;
case 6:
Serial->setDataBits(QSerialPort::Data6);
break;
case 5:
Serial->setDataBits(QSerialPort::Data5);
break;
default:
Serial->setDataBits(QSerialPort::Data8);
break;
}
int stop=ui->StopBits->currentText().toInt(); //设置停止位
switch(stop){
case 1:
Serial->setStopBits(QSerialPort::OneStop);
break;
case 2:
Serial->setStopBits(QSerialPort::TwoStop);
break;
}
QString parity=ui->check->currentText(); //设置校验位
if("无校验"==parity){
Serial->setParity(QSerialPort::NoParity);
}else if("偶校验"==parity){
Serial->setParity(QSerialPort::EvenParity);
}else if("奇校验"==parity){
Serial->setParity(QSerialPort::OddParity);
}
Serial->setFlowControl(QSerialPort::NoFlowControl); //设置流控制
4.串口读写操作:
读:
connect(Serial,SIGNAL(readyRead()),this,SLOT(readOnlyAll()));
void Widget::readOnlyAll(){
QByteArray Data = Serial->readAll();
ui->readText->appendPlainText(QString(Data));
}
写:
Serial->write(ui->writeText->text().toLocal8Bit().data());
5.断开连接:
Serial->clear();
Serial->close();
6.windows下项目打包:
- 将release中exe文件放在要打包的文件夹下;
- 打开QT控制台窗口,命令跳转到打包的文件夹的路径下;
- 通过命令windeployqt exe文件打包。