Qt 作为跨平台 C++ 图形用户界面应用程序开发框架,大大减小了应用程序的开发难度,对于异常的考虑也可以省去程序员的时间,特别是对工程应用的程序,在开发快速的同时还保持了健壮性。
作为工程应用,最常见的通信方式就是串口了,Qt 作为跨平台框架,特别是还支持嵌入式系统的UI设计,自然会对串口有较好的支持。
Qt 自带了两个类提供串口通信,分别是 QSerialPort 和 QSerialPortInfo。
使用这两个类之前需要在pro文件中添加:
Qt += serialport
简单使用例程如下:
#include < QMainWindow>
#include < QSerialPort>
#include < QSerialPortInfo>
#include < QDebug>
QSerialPort *comPort;
MainWindow::comInit()
{
comPort = new QSerialPort("COM3");
if(comPort->open(QIODevice::ReadWrite))
{
comPort->setBaudRate(QSerialPort::Baud9600);
comPort->setStopBits(QSerialPort::OneStop);
comPort->setParity(QSerialPort::NoParity);
comPort->setDataBits(QSerialPort::Data8);
comPort->setFlowControl(QSerialPort::NoFlowControl);
comPort->clearError();
comPort->clear();
connect(comPort,SIGNAL(readyRead()),this,SLOT(com_readData()));
}
else
{
qDebug() << "COM Open failed" << endl;
delete comPort;
}
}
MainWindow::com_readData()
{
QByteArray arr = comPort->readAll();
unsigned char *data = (unsigned char *)arr.data();
qDebug() << "Recive Data:" << data << endl;
}
MainWindow::com_writeData()
{
comPort->clearError();
comPort->write("hello");
if(comPort->error() != QSerialPort::NoError)
qDebug() << "Send Data Error!" << endl;
else
qDebug() << "Send Data Success!" << endl;
comPort->clearError();
}
如果学过51单片机,入学教程中附赠的串口调试助手有个 Bug 就是在软件中打开串口的情况下拔掉串口线程序会报错并无响应。Qt 官方提供的类很好的解决了这个错误问题,并且提供了多种错误信息,为程序编写提供了便利。
|