.h 头文件:
#include <QWidget>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QMessageBox>
主程序:
void MainWindow::init()
{
//获取所有可用的串口
auto portsInfo = QSerialPortInfo::availablePorts();
for(auto& info : portsInfo)//遍历所有串口选项
{
qInfo()<<info.description()<<info.portName()<<info.systemLocation();
ui->protsCmb->addItem(info.portName()+ ":" +info.description(),info.portName());
}
//获取标准波特率
auto baudrates = QSerialPortInfo::standardBaudRates();
for(auto br : baudrates)
{
ui->baudRateCmb->addItem(QString::number(br),br);
}
ui->baudRateCmb->setCurrentText("9600");
//设置停止位
ui->stopBitsCmb->addItem("1",QSerialPort::OneStop);
ui->stopBitsCmb->addItem("1.5",QSerialPort::OneAndHalfStop);
ui->stopBitsCmb->addItem("2",QSerialPort::TwoStop);
//设置数据位
ui->dataBitsCmb->addItem("5",QSerialPort::Data5);
ui->dataBitsCmb->addItem("6",QSerialPort::Data6);
ui->dataBitsCmb->addItem("7",QSerialPort::Data7);
ui->dataBitsCmb->addItem("8",QSerialPort::Data8);
//设置校验位
ui->parityCmb->addItem("NoParity",QSerialPort::NoParity);
ui->parityCmb->addItem("EvenParity", QSerialPort::EvenParity);
ui->parityCmb->addItem("OddParity",QSerialPort::OddParity);
ui->parityCmb->addItem("SpaceParity",QSerialPort::SpaceParity);
ui->parityCmb->addItem("MarkParity", QSerialPort::MarkParity);
}
void MainWindow::on_openProtBtn_released()
{
//判断串口是否已经打开:
if (serialPort_.isOpen())
{
serialPort_.close();
ui->openProtBtn->setText("打开串口");
return;
}
//获取串口信息
auto portName = ui->protsCmb->currentData().toString();
//获取波特率
auto baudRate = ui->baudRateCmb->currentData().value<QSerialPort::BaudRate>();//(转为枚举形式)
//获取停止位
auto stopBits = ui->stopBitsCmb->currentData().value<QSerialPort::StopBits>();
//获取数据位
auto dataBits = ui->dataBitsCmb->currentData().value<QSerialPort::DataBits>();
//获取校验位
auto parity = ui->parityCmb->currentData().value<QSerialPort::Parity>();
//把上面所建立的变量名和mainwindow中的实际功能关联起来:
serialPort_.setPortName(portName);
serialPort_.setBaudRate(baudRate);
serialPort_.setStopBits(stopBits);
serialPort_.setDataBits(dataBits);
serialPort_.setParity(parity);
if(!serialPort_.open(QIODevice::ReadWrite))
{
QMessageBox::warning(this,"warning",portName +" open failed: ",serialPort_.errorString());
return;
}
else
{
ui->openProtBtn->setText("关闭串口");
}
}
另外:请问大家,下面图片的问题如何解决: