已经得到个称赞     给我点赞
  • 副教授
  • 硕士生导师
  • 教师拼音名称:Tang Xinxing
  • 出生日期:1975-07-02
  • 电子邮箱:
  • 所在单位:机电工程学院
  • 性别:
  • 在职信息:在职
  • 毕业院校:吉林大学
教师博客
当前位置: 中文主页 >> 教师博客
QT串口编程
  • QT5有专门的串口类: 

    QSerialPort:提供访问串口的功能 

    QSerialPortInfo:提供系统中存在的串口的信息 

    具体使用方法: 

    在pro文件中加入: QT += serialport

    mainwindow.h中添加头文件及成员:

    public:

     QSerialPort serial;//串口实例

     void initSerialPort();//初始化串口函数

    private slots://必须加slots void serialRead(); 

    3.在主窗口添加一个comboBox,一个label,初始化串口


    void MainWindow::initSerialPort()

    {

        connect(&serial,SIGNAL(readyRead()),this,SLOT(serialRead()));   //连接槽

     

        //获取计算机上所有串口并添加到comboBox中 

    QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts(); if(infos.isEmpty()) { ui->comboBox->addItem("无串口"); return; } 

    foreach (QSerialPortInfo info, infos) {  ui->comboBox->addItem(info.portName()); qDebug() << info.portName();

    }

    }


    void MainWindow::on_comboBox_currentIndexChanged(const QString &arg1)

    {

        QSerialPortInfo info;

        QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts(); int i = 0; foreach (info, infos) 

    {

     if(info.portName() == arg1) break; i++; 

    if(i != infos.size ()){//can find ui->lblStatus->setText("串口打开成功"); 

    serial.close(); 

    serial.setPort(info); 

    serial.open(QIODevice::ReadWrite); //读写打开 // 

    serial.setBaudRate(QSerialPort::Baud9600); //波特率 //

     serial.setDataBits(QSerialPort::Data8); //数据位 //

     serial.setParity(QSerialPort::NoParity); //无奇偶校验 // serial.setStopBits(QSerialPort::OneStop); //无停止位 // serial.setFlowControl(QSerialPort::NoFlowControl); //无控制 

    }else

    serial.close(); ui->lblStatus->setText("串口打开失败"); 

    }

    1. void MainWindow::on_btnSend_clicked()

    2. {

    3.  //   QByteArray arr = "abcd";

    4.  //   serial.write(arr);

    5.     char dat[] = {0x55,0x01,0x05,0x00,0xAA};

    6. serial.write(dat,5);

    7. }


    void MainWindow::serialRead()

    {

        QByteArray qa = serial.readAll();

      //  if(qa.at(0)=='a')

        ui->textEdit->append(qa);  

        // str.sprintf("%02x ",(int)qa[i]);//十六进制显示 // QMessageBox::warning (this,tr("提示信息"),tr("串口接收成功")); 

    }