QT下的串口通讯实例(源码可下载QT5下测试通过)

在不了解QT下的串口如何调用的时候,我们可以首先到QT的官网上寻找答案,首先,我们可以访问:以下网址,搜索serial port qt,可以得到很多相关的线索
http://doc.qt.io/
在这里插入图片描述
这个QSerialport类十分丰富,比VC中的使用起来更方便,如下网址,我们可以查看它的所有成员
http://doc.qt.io/qt-5/qserialport-members.html
在这里插入图片描述
相关的一些准备工作,如头文件的包涵,pro文件的修改,可以参考这里,我不再赘述:
http://doc.qt.io/qt-5/qtserialport-index.html
在这里插入图片描述
假定,我们是要做一个简单的带UI的串口监控程序,那么我们首先必须通过枚举的方式,将所有的串口对象列出来,放在一个combox里面。
//枚举所有有效的串口,并添加到combox
foreach (const QSerialPortInfo &info ,QSerialPortInfo::availablePorts())
{
ui->PortBox->addItem(info.portName());
}
接下来,我们需要将波特率以及停止位校验位数据位等枚举数值在对应的combox中列出来,以供选择。
但这里,我们需要将枚举转化为conmbox需要的文字选项,需要进行下面的操作
//枚举所有的波特率
QMetaEnum emBr = QMetaEnum::fromTypeQSerialPort::BaudRate();
for(int i = 0; i < emBr.keyCount(); i++)
if(emBr.value(i)!=-1)
ui->BaudBox->addItem(QString::asprintf("%d",emBr.value(i)));
同样的方法,我们可以吗完成数据位校验位停止位的combox的填充,这里不再一一赘述。
设置完串口的各个参数即可开始连接串口读写数据了。

我们这里准备好读取数据函数,读取数据需要考虑显示的问题,这里用一个textEdit控件来作显示框。
void MainWindow:: Read_Data()
{

QByteArray buf;
    buf = serial->readAll();
    if(!buf.isEmpty())
    {
        QString str = ui->textEdit->toPlainText();
        str+=tr(buf);
        ui->textEdit->clear();
        ui->textEdit->append(str);
    }
    buf.clear();

}
最后,我们将串口读取触发与串口读取函数进行信号与槽的绑定链接即可正常接收数据了。
QObject::connect(serial, &QSerialPort::readyRead, this, &MainWindow::Read_Data);
随后,我们运行程序就可以看到效果了。测试如下:
在这里插入图片描述
源码下载地址:
https://download.csdn.net/download/haigear/10782388

猜你喜欢

转载自blog.csdn.net/haigear/article/details/84031299
今日推荐