QT串口教程1
新建工程,选QWidget为基类,如下图所示。
在.pro文件,中添加QT+=serialport
编辑界面文件,如下图所示。(所有控件名都要重新设置)
右击你的控件,如:按键,再点转到槽,就可以跳到该按键的槽函数。
在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码的形式通过串口发送出去。
}