QT串口教程1

新建工程,选QWidget为基类,如下图所示。

QT串口教程1

在.pro文件,中添加QT+=serialport

编辑界面文件,如下图所示。(所有控件名都要重新设置)

QT串口教程1

右击你的控件,如:按键,再点转到槽,就可以跳到该按键的槽函数。

QT串口教程1

在widget.h中添加头文件,以及槽函数和私有的串口类的声明

#include <QtSerialPort/QSerialPort>


private slots:
    void on_openPortBtn_clicked();	//利用“转到槽添加的槽函数声明
    void read_Com();			//手动添加的槽函数声明,用于读出串口缓冲区的内容
    void on_SendBtn_clicked();		//利用“转到槽添加的槽函数声明

private:
    Ui::Widget *ui;
    QSerialPort serial;			//声明串口类


main.cpp可以不改,然后,在widget.cpp中添加槽函数的定义

void Widget::on_openPortBtn_clicked()
{
    if(ui->portNameComboBox->isEnabled())
    {
        ui->openPortBtn->setText("ClosePort");		//按下“OpenPort后,按键显示为“ClosePort”
        ui->portNameComboBox->setDisabled(true);	//按下“OpenPort后,禁止再修改COM口
        serial.setPortName(ui->portNameComboBox->currentText());	//设置COM口
        serial.setBaudRate(QSerialPort::Baud9600,QSerialPort::AllDirections);//设置波特率和读写方向
        serial.setDataBits(QSerialPort::Data8);		//数据位为8位
        serial.setFlowControl(QSerialPort::NoFlowControl);//无流控制
        serial.setParity(QSerialPort::NoParity);	//无校验位
        serial.setStopBits(QSerialPort::OneStop);	//一位停止位
        serial.close();					//先关串口,再打开,可以保证串口不被其它函数占用。
        if(serial.open(QIODevice::ReadWrite))		//以可读写的方式打开串口
        {
            connect(&serial,SIGNAL(readyRead()),this,SLOT(read_Com()));	//把串口的readyRead()信号绑定到read_Com()这个槽函数上
        }
    } else {
        ui->openPortBtn->setText("OpenPort");		//按下“ClosePort后,按键显示为“OpenPort
        ui->portNameComboBox->setEnabled(true);		//按下“ClosePort后,COM口可被修改
        serial.close();					//关串口
    }
}

void Widget::read_Com()
{
    QByteArray temp=serial.read(1);//在缓冲区中读一个byte
    if(!temp.isEmpty())//如果读到的数据不为空
    {
    ui->recvTextBrowser->insertPlainText("0x");
    ui->recvTextBrowser->insertPlainText(temp.toHex());//显示接收到的数据的十六进制
    ui->recvTextBrowser->insertPlainText(" ");
    }
}

void Widget::on_SendBtn_clicked()
{
    serial.write(ui->sendTextEdit->toPlainText().toLatin1());//以ASCII码的形式通过串口发送出去。
}