QT写的串口调试助手

用qt写的串口通信程序,实现了,1、发送文件,2、发送接收十六进制,3、基本收发

软件打包发布以后的:https://download.csdn.net/download/qq_39340220/10719686

源代码:https://download.csdn.net/download/qq_39340220/10719472

/**
  * @brief  查找串口号并放入QComboBox中
  * @param  None
  * @retval None
  */
void serialWidget::FindSerial()
{
    //这里我使用自动寻找可用串口的方法,直接自动设置了
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        QSerialPort serial;
        serial.setPort(info);
 
        //如果成功,则返回true;否则返回false
        if(serial.open(QIODevice::ReadWrite))
        {
 
            int itemnumber=ui->comboBoxSerial->count();//获得当前列表个数
 
            int Noitem = 0;//标志位判断是否已经添加
            for(int i=0;i<itemnumber;i++)//遍历当前保存的所有项目
            {
                if(ui->comboBoxSerial->itemText(i)==serial.portName())//如果查找到的项目已存在标志位加1
                {
                    Noitem++;
                }
            }
            //标志位不等于0表面当前查找到的串口,先去已经存储
            //标志位等于零表示串口没有添加,可添加
            if(Noitem == 0)
            {
                Noitem = 0;
                ui->comboBoxSerial->addItem(serial.portName());
            }
            DeletePullSerial();//删除拔出的usb串口
            serial.close();
        }
    }
 
}
/**
  * @brief  串口初始化
  * @param  None
  * @retval None
  */
void serialWidget::initserial()
{
    //1、设置串口名(如COM1)
    serial->setPortName(ui->comboBoxSerial->currentText());
 
    //2、打开串口
    if(!serial->open(QIODevice::ReadWrite))
    {
        ui->labelstate->setText("串口打开失败");
        ui->ButtonSenddata->setEnabled(false);
        ui->ButtonSendSeleFile->setEnabled(false);
    }
    else
    {
        ui->labelstate->setText("串口打开成功");
        ui->ButtonSenddata->setEnabled(true);
        ui->ButtonSendSeleFile->setEnabled(true);
    }
 
    //3、设置波特率(如:115200)
    serial->setBaudRate(ui->comboBoxBaud->currentText().toInt());
 
    //4、设置校验位(如:0)//currentText().toInt()返回的是当前索引
    switch(ui->comboBoxCheck->currentText().toInt())
    {
        case 0:serial->setParity(QSerialPort::NoParity);break;
        case 1:serial->setParity(QSerialPort::OddParity);break;
        case 2:serial->setParity(QSerialPort::EvenParity);break;
        case 3:serial->setParity(QSerialPort::MarkParity);break;
        case 4:serial->setParity(QSerialPort::SpaceParity);break;
    }
 
    //5、设置数据位(如:8位)
    switch(ui->comboBoxBit->currentText().toInt())
    {
        case 0:serial->setDataBits(QSerialPort::Data5);break;
        case 1:serial->setDataBits(QSerialPort::Data6);break;
        case 2:serial->setDataBits(QSerialPort::Data7);break;
        case 3:serial->setDataBits(QSerialPort::Data8);break;
    }
 
 
    //6、停止位(如:1)
    switch(ui->comboBoxStop->currentText().toInt())
    {
        case 0:serial->setStopBits(QSerialPort::OneStop);break;
        case 1:serial->setStopBits(QSerialPort::OneAndHalfStop);break;
        case 2:serial->setStopBits(QSerialPort::TwoStop);break;
    }
 
    //7、设置流控制(如:0)
    switch(ui->comboBoxFlow->currentText().toInt())
    {
        case 0:serial->setFlowControl(QSerialPort::NoFlowControl);break;
        case 1:serial->setFlowControl(QSerialPort::HardwareControl);break;
        case 2:serial->setFlowControl(QSerialPort::SoftwareControl);break;
        case 3:serial->setFlowControl(QSerialPort::UnknownFlowControl);break;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39340220/article/details/83047060